Je sais que je peux faire exécuter quelque chose toutes les cinq minutes avec une ligne comme celle-ci:
*/5 * * * * /my/script
Que se passe-t-il si je ne veux pas que ça fonctionne à midi, 12h05, 12h10, mais plutôt à 12h01, 12h06, 12h11, etc.? Je suppose que je peux faire ceci:
1,6,11,16,21,26,31,36,41,46,51,56 * * * * /my/script
... mais c'est moche. Y a-t-il une manière plus élégante de le faire?
1-56/5 * * * * /my/script
Cela devrait fonctionner sur vixiecron, je ne suis pas sûr des autres implémentations.
Utilisez votre premier horaire:
*/5 * * * * /my/script
Et ajoutez ceci au début de votre script:
sleep 60
(Oui, c'est une blague)
C'est un sujet assez ancien, mais comme beaucoup de temps s'est écoulé, il existe maintenant quelques autres options. L'une d'elles consiste à ne pas utiliser cron du tout, ni à utiliser les timers systemd. Leur utilisation vous donne une granularité plus élevée que quelques secondes et de nombreuses autres options.
Plus d'informations sont disponibles ici https://wiki.archlinux.org/index.php/Systemd/Timers
par exemple pour exécuter une commande adhoc
# systemd-run --on-calendar="*:1/5" /bin/touch /tmp/foo2
Running timer as unit run-r31335c4878f24f90b02c8ebed319ca60.timer.
Will run service as unit run-r31335c4878f24f90b02c8ebed319ca60.service.
# systemctl status run-r31335c4878f24f90b02c8ebed319ca60.timer
● run-r31335c4878f24f90b02c8ebed319ca60.timer - /bin/touch /tmp/foo2
Loaded: loaded
Transient: yes
Drop-In: /run/systemd/system/run-r31335c4878f24f90b02c8ebed319ca60.timer.d
└─50-Description.conf, 50-OnCalendar.conf, 50-RemainAfterElapse.conf
Active: active (waiting) since Wed 2017-10-25 09:05:13 UTC; 40s ago
# ls -l /tmp/foo*
-rw-r--r-- 1 root root 0 Oct 25 09:06 /tmp/foo2
# sleep 300; ls -l /tmp/foo*
-rw-r--r-- 1 root root 0 Oct 25 09:11 /tmp/foo2
# date; ls -l /tmp/foo2
Wed Oct 25 09:21:42 UTC 2017
-rw-r--r-- 1 root root 0 Oct 25 09:21 /tmp/foo2
edit: ce type de timers ne persistera pas après le redémarrage, si vous voulez qu'ils s'assurent de générer le bon fichier de service, avec la ligne oncalendar appropriée