Cron.daily pour les noobs

Je te prĂ©viens, mais t’es probablement dĂ©jĂ au courant : ce blog est surtout mon aide-mĂ©moire et mĂŞme si parfois je gère des trucs un peu velus, je reste un indĂ©fectible noob. Cet article s’inscrit dans cet esprit car il peut te sembler Ă©vident ou simpliste… N’hĂ©site cependant pas Ă commenter si tu souhaites ajouter un Ă©claircissement ou quelque lumière…
Ca fait un moment que je m’Ă©clate avec FLOZz Daily Mix (merci FLOZz) sur mon instance Navidrome. C’est vraiment cool parce que ça me force Ă Ă©couter des morceaux de musique que je n’aurai pas choisis volontairement et ça m’aide Ă diversifier ce que j’Ă©coute quand je bosse (dommage, j’Ă©coute moins Radio404).
Par contre, je lançais manuellement la gĂ©nĂ©ration de la liste de lecture lorsque je souhaitais modifier le contenu ; NiaNiaNia ssh, ctrl+r, flozz… c’Ă©tait un peu poussif. J’ai donc fini par vouloir planifier quotidiennement cette mise Ă jour ; si possible avant que je ne dĂ©bute ma journĂ©e de travail. Donc autant faire une cron quotidienne pour gĂ©rer ça. Ce qui tombe bien, c’est qu’il existe des cron.daily qui s’opèrent Ă chaque dĂ©but de journĂ©e ! Ma première tentative, très naĂŻve s’est soldĂ©e par un Ă©chec, je me suis dit que cet article aurait pu t’aider…
Le comportement de cron.daily, weekly et monthly est définit par /etc/crontab :
root@dressing:~# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily; }
47 6 * * 7 root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.weekly; }
52 6 1 * * root test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.monthly; }
#Les tâches planifiĂ©es quotidiennes se lanceront donc Ă 6h25, parce que, quand-mĂŞme, on sait lire une cron. Par contre si on s’emmerde Ă lire un poil plus, on peut comprendre la magie derrière.
Le système va vĂ©rifier s’il faut utiliser anacron ou run-parts Ă l’aide de la commande test -x. Si /usr/sbin/anacron n’existe pas ou qu’il ne dĂ©tient pas de droit d’exĂ©cution, lancer run-parts --report sur le dossier /etc/cron.daily. La manpage de run-parts est Ă©loquente : ExĂ©cuter les scripts ou les exĂ©cutables d’un rĂ©pertoire, le paramètre report affiche quant Ă lui le nom des scripts lorsque produisant une sortie stdin ou stderr.
LĂ oĂą j’ai Ă©tĂ© naĂŻf et oĂą tu ne le seras donc pas : c’est bien un exĂ©cutable qu’il te faudra dans /etc/cron.daily, pas un fichier texte comme on Ă©crit une cron ! Donc colles-y un script bash (mĂŞme simpliste) sans oublier de le chmod +x.
root@dressing:~# vi /etc/cron.daily/dailymix.sh
# Aucun intérêt de te coller mon script, comme d'hab c'est une excuse pour
# publier un truc sur le fonctionnement de l'OS
root@dressing:~# chmod +x /etc/cron.daily/dailymix.shTu peux alors tester si ta tâche planifiée sera bien prise en compte demain matin.
root@dressing:~# run-parts --test /etc/cron.daily
/etc/cron.daily/apache2
/etc/cron.daily/apt-compat
# TADA.wav
/etc/cron.daily/dailymix.sh
#
/etc/cron.daily/debsums
/etc/cron.daily/dpkg
/etc/cron.daily/exim4-base
/etc/cron.daily/locate
/etc/cron.daily/logrotate
/etc/cron.daily/man-dbEt si tu veux exĂ©cuter ta tâche planifiĂ©e sans attendre demain parce qu’il est 6h27…
root@dressing:~# run-parts /etc/cron.daily --regex '^dailymix.sh$'Petit Ă petit, on devient moins nooby. Passe de bonnes fĂŞtes !
