Créer des tâches planifiées (Linux)

Cron est le logiciel par défaut sous linux pour planifier des tâches récurrente, il peut au minimum exécuter une tâche toute les minutes.

cron embarque des commandes pour configurer les tâches planifiées

# Pour afficher les tâches planifié ( de l'utilisateur actuel)
crontab -l

# Pour créer/supprimer/modifier une tâche planififé (de l'utilisateur actuel)
crontab -e

# Pour supprimer les tâches planififés de l'utilisateur actuel
crontab -r

# Pour afficher les tâche d'un autre utilisateur (en tant que root)
crontab -u user -l

Les tâches planifiées pour l'utilisateur root sont placées dans /etc/crontab
Les tâches planifiées des utilisateurs sont placés dans /var/spool/cron/crontabs/user

Il se présente dans /etc/crontab comme ceci :

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |   .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |   |   .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |   |   |   _ user
# *  *  *   *   *   *     *- command to be executed
# m  h  dom mon dow user  command

Synthaxe

  • mm : minutes (00-59).
  • h : heures (00-23)
  • jj : jour du mois (01-31)
  • MM : mois (01-12 ou abréviation anglaise sur trois lettres : jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec)
  • JJJ : jour de la semaine (1-7 ou abréviation anglaise sur trois lettres : mon, tue, wed, thu, fri, sat, sun)
  • user (facultatif) : nom d'utilisateur avec lequel exécuter la tâche
  • tâche : commande à exécuter
  • * : Tout les (selon la colone ou il est placé)
  • @yearlly : Tous les ans
  • @monthly:  Tous les 1er du mois
  • @weekly: Tous les samedi matin à minuit
  • @daily : Tous les jours à minuit
  • @hourly : toute les heures (au commencement de l'heure)
  • @reboot : Au redémarrage

Quelques exemples :

#Créer archive de /var/www tout les dimanches à 23h30
30 23 * * 7 tar zcf /root/Backup.tar.gz /var/www/

#Ajouter la variable $PATH dans un fichier /tmp/crontest (toute les minutes)
* * * * * echo $PATH >> /tmp/crontest

#Envoyer le log d'accès apache tous les 1er du mois par mail
@monthly mail -a /var/log/apache2/access.log -s "Rapport log" dest@domain.fr

Sécurité de cron

Pour augmenter la sécurité vous pouvez autoriser et refuse des utilisateurs de créer des tâches cron via /etc/cron.allow et cron.deny

Pour interdire tout les utilisateurs et en autoriser certains :

#Créer /etc/cron.deny et ajoutez la ligne suivante :
ALL
#Créer le fichier cron.allow et ajoutez les utilisateurs
user1
user2
user5
...