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.shroot@dressing:~# vi /etc/cron.daily/dailymix.sh
<em># Aucun intérêt de te coller mon script, comme d'hab c'est une excuse pour</em>
<em># publier un truc sur le fonctionnement de l'OS</em>
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-dbroot@dressing:~# run-parts --test /etc/cron.daily
/etc/cron.daily/apache2
/etc/cron.daily/apt-compat
<em># TADA.wav</em>
/etc/cron.daily/dailymix.sh
<em># </em>
/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$'root@dressing:~# run-parts /etc/cron.daily --regex '^dailymix.sh$'Petit à petit, on devient moins nooby. Passe de bonnes fêtes !
