Table des matières

Cron : Gestion des tâches planifiées

Introduction

Cron est un utilitaire Unix qui permet d'exécuter des commandes ou des scripts à une heure, date ou cycle en fonction de vos besoin.

Utilisation

2 commandes utiles :

Pour éditer la table de cron :

serveur$ crontab -e

Pour lister la table de cron :

serveur$ crontab -L

Les commandes sont à lancer en root ou précédées de 'sudo'.

Syntaxe

La syntaxe est simple et commune au différentes distributions Unix (une ligne = une tâche).

m h D M J  user  tâche

La notation sera la suivante

* : N'importe quelle valeur
x : La valeur souhaité
x,x : Séparateur d'une liste de valeur
x-x : Intervalle de valeur
*/x : Cycle

Ce qui donne par exemple :

serveur$ crontab -l
0 23 * * *  root  /home/sauvegarde/sauvegardes.sh

Dans l'exemple ci-dessus, 'root' va exécuter le script '/home/sauvegarde/sauvegardes.sh' à 23h00 tous les jours de l'année.

Raccourcis (non standard)

Raccourci Équivalent Traduction
@hourly 0 * * * * Toutes les minutes
@daily 0 0 * * * Tous les jours
@weekly 0 0 * * 0 Toutes les semaines
@monthly 0 0 1 * * Tous les mois
@annually 0 0 1 1 * Tous les ans

Il existe aussi un raccourci qui permet de lancer une tâche au démarrage :

@reboot  root  mount -a

Exemples

m h D M J Traduction
* * * * * Toutes les minutes
0 23 * * * Tous les jours à 23h00
0 */6 * * * Toutes les 6 heures
0 11,23 * * 1-5 À 11h et 23h du lundi au samedi
0 23 L * * À 23h00 le dernier jour du mois (non standard)
0 0 1 1/3 * Tous les 3 mois à partir de janvier le 1er du mois à minuit

Notification par mail

Par défaut, un rapport est envoyé dans la boîte local de l'utilisateur. Au début de votre fichier crontab, vous devez mettre :

# Pour désactiver
MAILTO=""
# Pour activer vers votre mail
MAILTO="user@domain.tld"

Tâches cron utiles

Sur tous mes serveurs, j'ai systématiquement les 2 lignes ci-dessous en cron.

# Vérification des mise à jour (pour remonter supervision)
30 23 * * * /usr/bin/apt-get update
# Remise à l'heure du serveur
0 23 * * * ntpdate fr.pool.ntp.org

Tâche ponctuelle à une heure précise

Les jobs, une alternative dans le cas où vous devez exécuter une tâche à un moment X sans devoir aller éditer votre fichier. Imaginez, vous devez lancer un script de maintenance provisoire à 22h00. Vous taper 'at HH:MM', 'Enter', votre commande '/root/maintenance.sh', 'ctrl + D', <EOT> apparaît et valide le job (1 dans le cas ci-dessous).

serveur$ at 22:00
warning: commands will be executed using /bin/sh
at> /root/maintenance.sh
at> <EOT>
job 1 at Thu Aug  3 22:00:00 2016

Pour voir les jobs en attente :

serveur$ atq
1       Thu Aug  3 22:00:00 2016 a root

Pour supprimer un job :

serveur$ atrm 1

Conclusion

Vous voilà maintenant prêt à affronter le merveilleux éditeur VIM (euh, …, ou pas !), votre éditeur favoris pour écrire vos scripts d'automatisation, de sauvegardes, etc… Et ensuite de lancer via cron afin que vous puissiez dormir tranquille sur vos 2 oreilles…

Vous trouverez sur ce site (crontab.guru) pas mal d'exemples, mais qui vous aidera à la construction de votre tâche. ;-)