wiki/HowtoCron.md

102 lines
4.2 KiB
Markdown
Raw Normal View History

2017-06-18 04:30:26 +02:00
---
categories: sysadmin web
title: Howto Cron
...
2016-12-29 11:25:39 +01:00
2017-06-18 04:30:26 +02:00
Le service **cron** (diminutif de *crontab*, pour **c**h**ron**o **tab**le) est le planificateur de tâches standard sur les systèmes UNIX/Linux. Il permet le déclenchement de commandes à des dates récurrentes (à la minute près).
2016-12-29 11:25:39 +01:00
2017-06-18 04:30:26 +02:00
## Installation
En général le paquet **cron** est installé et le service tourne déjà :
~~~
# systemctl status cron
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Docs: man:cron(8)
Main PID: 492 (cron)
CGroup: /system.slice/cron.service
└─492 /usr/sbin/cron -f
~~~
## Configuration
La configuration se trouve dans le fichier `/etc/crontab` :
~~~
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
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 )
~~~
2017-06-18 13:20:42 +02:00
On trouve notamment des dates fixées pour les actions définies dans les répertoires `/etc/cron.{hourly,daily,weekly,monthly}` : nous conseillons de modifier ces horaires fixes, pour éviter des déclenchements simultanés sur plusieurs serveurs.
2017-06-18 04:30:26 +02:00
2017-06-18 13:20:42 +02:00
On peut également modifier certaines options via le fichier `/etc/default/cron`, notamment la journalisation : par défaut `-L 5` enregistre le démarrage de chaque cron et les éventuelles erreurs, on peut passer à `-L 15` pour avoir un maximum d'informations notamment la date de fin de chaque cron.
2017-06-18 04:30:26 +02:00
## Utilisation
2016-12-29 11:25:39 +01:00
2017-06-18 13:20:42 +02:00
### /etc/cron.{hourly,daily,weekly,monthly} et /etc/cron.d/
Pour lancer un script à une date fixée par le système, il suffit de le placer dans l'un des répertoires `/etc/cron.{hourly,daily,weekly,monthly}` en fonction de la fréquence souhaitée ou dans `/etc/cron.d/` où l'on peut choisir une fréquence personnalisée.
Attention, en cas d'erreur de syntaxe dans un script, tous les autres scripts du même répertoire ne seront pas lancés ! Il faut donc réserver cette utilisation à des scripts bien vérifiés (c'est notamment utilisé par les packages Debian).
### /etc/crontab
### crontab -e
2016-12-29 11:25:39 +01:00
### Détection d'erreurs
On peut ajouter la configuration suivante au logiciel log2mail pour détecter d'éventuelles erreurs de syntaxe dans /etc/crontab par exemple :
~~~
file = /var/log/cron.log
pattern = "Error"
mailto = root
2017-06-18 04:30:26 +02:00
~~~
Fichiers
répertoire /var/spool/cron/crontabs/
Syntaxe : minutes heures jours mois jour/semaine commande
"*" = toutes les occurrences, "," = liste, "-" = intervalle
Ex :
0,15,30,45 * * * * /usr/local/adm/check-nis 1>/dev/null 2>&1
00 01 * * * nice -10 find /inf -name core -exec rm -f {} \;
10 03 * * 1-6 nice -10 /usr/local/adm/sauvegarde-daily
30 05 * * 0 /usr/local/adm/savelog-weekly
30 06 1 * * /usr/local/adm/savelog-monthly
00 00 1 1 * /usr/local/bin/happy-new-year
Commande :
cron: analyse des fichiers crontabs et exécute les actions
crontab -l, crontab -e, crontab -r
ps auwx | grep cron
vim /etc/crontab
ls /etc/cron.*
/var/spool/cron/crontabs
crontab -l / -e
@hourly @daily @weekly @monthly
man 5 crontab
2017-06-18 13:20:42 +02:00
## FAQ
### Peut-on écrire un cron dans /etc/crontab ?
Si vous ajoutez une ligne de cron dans `/etc/crontab` elle sera exécutée en _root_ : mais nous déconseillons fortement cette utilisation car ce fichier de configuration doit rester intact autant que possible, en général il faut éviter de lancer un cron en tant que _root_ et enfin la moindre erreur de syntaxe va provoquer le non lancement de tous les autres scripts !
### Changement d'heure
En France, lors d'un changement d'heure d'été ou d'hiver, on peut imaginer qu'un script lancé entre 2h et 3h du matin se lancera deux fois ou zéro fois selon les cas. Mais sous Debian, lorsque *cron* détecte un saut important dans l'heure locale, il va prévenir ce comportement en lançant les crons qu'une seule fois (passage à l'heure d'hiver) ou juste après le changement d'heure (passage à l'heure d'été). Par précaution, nous évitons tout de même de mettre des crons entre 2h et 3h du matin.