Tâches planifiées avec linux

Cron est un programme qui permet d’exécuter automatiquement des scripts, des commandes à une certaine date, ou selon un cycle. Le nom est dérivé du grec chronos qui signifie le temps.

Il s’agit d’une fonctionnalité très utile pour des tâches d’administration système, mais peut être utilisée pour beaucoup d’autres choses !

Cron est un démon, (crond) attend ainsi jusqu’au moment spécifié dans le fichier de configuration (que l’on appelle la crontab) puis effectue l’action correspondante et se rendort jusqu’à l’événement suivant.

1. Tâche simple avec cron

Utilisation de cron avec cron.daily, cron.hourly, cron.monthly, cron.weekly

Ce sont des répertoires, ils sont placés dans /etc/

Lorsque vous placez un script dans l’un de ces quatre répertoires, vous en automatiserez sont exécution :

Nom répertoire Type d’automatisation
cron.daily Une fois par jour
cron.hourly Une fois par heure
cron.monthly Une fois par mois
cron.weekly Une fois par semaine

Ici, vous placez directement vos scripts dans ces répertoires mais attention, vous devez impérativement ajouter les droits d’exécution sur ces scripts (chmod +x)

2. Tâche avancée avec cron

Crontab permet de défninir à un instant t l’exécution d’une commande, de la rendre répétitive, etc …

La commande crontab -l permet d’afficher sur la sortie standard les tâches planifiées avec crontab.

La commande crontab -e permet d’éditer le fichier cron de l’utilisateur actuel. En effet chaque utilisateur possède sa propre crontab, mais si vous entrez la commande crontab -u utlisateur -e vous allez éditer la crontab de l’utilisateur spécifié.

Rappel de la commande :

crontab -e

Syntaxe d’une crontab

La syntaxe d’une ligne crontab est la suivante :

mm hh jj MMM JJJ tâche > log
  • mm : Correspond aux minutes (de 0 à 59)
  • hh : Correspond aux heures (de 0 à 23)
  • jj : Correspond à la date du jour (de 0 à 31)
  • MMM : Correspond au numéro du mois ou bien à son abréviation (de 1 à 12 ou jav, feb, mar, apr, … )
  • JJJ : Correspond au numéro du jour de la semaine ou bien à son abréviation (de 1 à 7 => Lundi : 1, … Dimanche : 7 | ou bien mon, thu, wed, …)
  • tâche : correspond à la tâche à exécuter
  • > log : Indique le fichier de log dans lequel mettre le journal, sachez que si vous ne renseignez pas ce champ, un mail sera envoyé à l’utilisateur de la crontab, afin d’éviter ceci, indiquez > /dev/null

Pour chaque unité de temps, vous pouvez utiliser ceci :

  • *: a chaque unité de temps
  • 1-6: les unités de temps (1,2,3,4,5,6)
  • */5: toutes les 5 unités de temps (0,5,10,…)
  • 6,9: les unités de temps 6 et 9

Remarque : Il est possible de remplacer toutes les unités de temps par @reboot : cela exécutera les scripts au redémarrage du système.

Exemples :

Une tâche qui s’exécute tous les jours à 22h20 :

20 22 * * * /root/script.sh

Une tâche qui s’exécute tous les premiers de chaque mois à 22h20 :

20 22 1 * * /root/script.sh

Une tâche qui s’exécute toutes les heures, passées de 10 minutes :

10 * * * * /root/script.sh

Une tâche qui s’exécute toutes les 20 minutes :

*/20 * * * * /root/script.sh

Une tâche qui s’exécute tous les jours pairs à 22h20 :

20 22 */2 * * /root/script.sh