Cron : Gestion des tâches planifiées

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.

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'.

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

m h D M J  user  tâche
  • Le cycle de répétition
    • Les minutes (m) de 0 à 59
    • Les heures (h) de 0 à 59
    • Les jours du mois (D) de 1 à 31
    • Les mois (M) de 1 à 12
    1. Les jour de la semaine (J) de 0 à 6 (0 représentant le dimanche)
  • L'utilisateur sous lequel la tâche sera exécutée (user)
  • La commande ou script (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.

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
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

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"

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

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

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. ;-)

Vous pourriez laisser un commentaire si vous étiez connecté.