Publié le 07 août 2023
Sur les systèmes Linux récents, systemd prends en charge les tâches
planifiées, ce qui permets de se passer de cron. Pour ça, il faut créer
deux fichier : un .timer
et un .service
.
Il faut d’abord créer un fichier
/etc/systemd/system/nom_tache_planifiee.timer
:
[Unit]
Description=Description de la tâche planifiée
[Timer]
OnBootSec=30s
OnCalendar=*:0/20
[Install]
WantedBy=timers.target
Il y a plusieurs paramètres à modifier :
Description
: le nom est parlantOnBootSec
: définit un délai entre le démarrage du
système et le premier lancement de la tâche planifiée. Le but est
d’éviter de lancer toutes les tâches planifiées en même temps au
démarrage du systèmeOnCalendar
: définit la période de déclenchement. Ici,
*:0:20
indique que ça se lance toutes les 20 minutesD’autres paramètres facultatifs peuvent être définis :
Persistent
: s’il est à true, la tâche planifiée sera
lancée au démarrage du système, si un lancement précédent a été raté à
cause de son extinctionIl faut ensuite créer un fichier
/etc/systemd/system/nom_tache_planifiee.service
:
[Unit]
Description=Description de la tâche planifiée
Wants=nom_tache_planifiee.timer
[Service]
User=palc
Type=simple
ExecStart=/usr/bin/echo `date` >>/tmp/date.log
Il y a plusieurs paramètres à modifier :
Description
: le nom est parlantWants
: c’est le nom du fichier .timer
créé précédemmentUser
: utilisateur qui exécutera la tâche
planifiéeExecStart
: la commande à lancerIl faut maintenant activer la tâche planifiée. D’abord on recharge la configuration de systemd :
systemctl daemon-reload
Ensuite on active la tâche planifiée :
systemctl enable nom_tache_planifiee.timer
Il est possible de lancer la tâche planifiée manuellement avec :
systemctl start nom_tache_planifiee.service
Et pour voir les logs, ça se passe avec journalctl
:
journalctl -u nom_tache_planifiee.service