Cron.daily pour les noobs

Cron.daily pour les noobs

news, daily newspaper, press, newspapers, information, read, newspaper, newsprint, topics of the day, news, news, news, news, newspaper, newspaper, newspaper, newspaper, newspaper

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 :

Bash
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.

Bash
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.sh

Tu peux alors tester si ta tâche planifiée sera bien prise en compte demain matin.

Bash
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-db

Et si tu veux exĂ©cuter ta tâche planifiĂ©e sans attendre demain parce qu’il est 6h27…

Bash
root@dressing:~# run-parts /etc/cron.daily --regex '^dailymix.sh$'

Petit Ă  petit, on devient moins nooby. Passe de bonnes fĂŞtes !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *