Raccourcis | Description | Équivalent |
---|---|---|
@reboot | Au démarrage | Aucun |
@yearly | Tous les ans | 0 0 1 1 * |
@annually | Tous les ans | 0 0 1 1 * |
@monthly | Tous les mois | 0 0 1 * * |
@weekly | Toutes les semaines | 0 0 * * 0 |
@daily | Tous les jours | 0 0 * * * |
@midnight | Tous les jours | 0 0 * * * |
@hourly | Toutes les heures | 0 * * * * |
Imaginons que l'on veuille faire un journal (dans le fichier /tmp/log_df.txt par exemple) automatisé de l'espace disque libre (commande df) à des intervalles de temps précis :
30 23 * * * df >>/tmp/log_df.txt
5 * * * * df >>/tmp/log_df.txt
30 23 1 * * df >>/tmp/log_df.txt
28 22 * * 1 df >>/tmp/log_df.txt
12 10 2-5 * * df >>/tmp/log_df.txt
59 23 */2 * * df >>/tmp/log_df.txt
0 22 * * 1-5 df >>/tmp/log_df.txt
*/5 * * * * df >>/tmp/log_df.txt
0 0 28-31 * * [ `/bin/date +\%d` -gt `/bin/date +\%d -d "1 day"` ] && df >>/tmp/log_df.txt
0 0 * * 0 [ `/bin/date +\%d` -gt `/bin/date +\%d -d "7 day"` ] && df >>/tmp/log_df.txt
0 0 25-31 1,3,5,7,8,10,12 0 my-script.sh 0 0 24-30 4,6,9,11 0 my-script.sh 0 0 22-29 2 0 my-script.sh
0 0 21-31 * * /bin/script.sh
$ cat /bin/script.sh #!/bin/sh dernierdimanche=`cal -m | awk '{print $7}' | tail -1` aujourdhui=`date +%d` if [ $aujourdhui -eq $dernierdimanche ] then df >>/tmp/log_df.txt else echo "Nous ne sommes pas encore le dernier dimanche du mois." fi
0 0 * * 0 [ `date '+\%e'` -le 7 ] && df >>/tmp/log_df.txt
0 0 1-7 * * /bin/script2.sh
$ cat /bin/script2.sh #!/bin/sh premierdimanche=`cal -m | awk '{print $7}' | head -3 | tail -1` aujourdhui=`date +%d` if [ $aujourdhui -eq $premierdimanche ] then df >>/tmp/log_df.txt else echo "Nous ne sommes pas encore le premier dimanche du mois." fi
Autre exemple, le script shell suivant (que l'on supposera stocké dans /home/backup sous le nom backup.cmd) exporte les enregistrements de MySQL (de la table ccmusers par exemple) dans un fichier dont le nom est ccmusers suivi de la date sous la forme jour-mois-annee-heure-minute:
#!/bin/sh DATE=$(date +%d-%m-%Y-%H-%M) /usr/local/mysql/bin/mysqldump -u root ccmusers > /home/backup/ccmusers${DATE}.sql
Ainsi pour automatiser (chaque jour à 23h59) le backup de la table ccmusers de MySQL et l'appel d'une page web (chaque jour à 21h30), il suffira d'ajouter l'entrée suivante dans la table cron:
59 23 * * * /home/backup/backup.cmd >>/dev/null 30 21 * * * wget -O /dev/null http://example.com/mapage.html >>/dev/null
Changements d'heure : Si vous utilisez le changement d'heure hiver/été, selon les règles en vigueur en France, les tâches Cron entre 02h00 et 02h59 du dernier dimanche du mois de mars ne seront pas exécutées (on passe de 2h à 3h). À l'inverse, les tâches Cron entre 02h00 et 02h59 du dernier dimanche du mois d'octobre seront exécutées deux fois (on passe de 3h à 2h). Cependant, la plupart des systèmes Unix sont configurés pour utiliser au niveau système le UTC, qui n'est pas sujet à ces règles de changement d'heure et évite donc ce désagrément.
ATTENTION un "man cron" sur un système linux type debian indique le contraire, merci, à qui de droit de corriger l'article proprement, extrait du man :
Il existe des dispositions spéciales lorsque l'horloge est modifiée de moins de 4 heures, par exemple au début et à la fin de l'heure d'été. Si l'heure a été avancée, les travaux qui auraient dû être exécutés à ce moment là le seront juste après le changement. À l'inverse, si l'heure a été retardée de moins de 3 heures, les travaux qui tombent dans cet intervalle de temps ne seront pas exécutés de nouveau.
Seuls les travaux qui sont exécutés à un moment particulier (ni spécifiés par @hourly ni par « * » dans le champ heure ou minute) sont affectés. Les travaux spécifiés avec des astérisques sont exécutés immédiatement sur la base de l'heure modifiée.
Les changements d'horloge de plus de 3 heures sont considérés comme des corrections de l'horloge, et la nouvelle heure est utilisée immédiatement.
cron journalise ses actions à l'aide du paramètre « cron » de syslog, et la journalisation peut être contrôlée en utilisant le système standard syslogd(8).