Commandes Linux : crontab

CRONTAB

Installé avec le paquet crontab
Voir aussi : at, anacron et update-alternatives

 

Remarques

Ne jamais éditer les fichiers cron d’un utilisateur à la main, toujours recourir à la commande crontab.

 

Les fichiers crontabs

Localisation

Les fichiers crontabs des services sont stockés dans /etc/cron.d/ et portent le nom des services.
Les scripts planifiés des services sont stockés les dossiers /etc/cron.{hourly,daily,weekly,monthly}.
Les fichiers cron des utilisateurs sont stockés dans /var/spool/cron/crontabs/ et portent le nom de ces derniers :

# tree /var/spool/cron/crontabs/
/var/spool/cron/crontabs/
├── adminsys
└── root
Activer/désactiver les crontabs pour un utilisateur :

Pour autoriser un utilisateur à utiliser crontab, il suffit de créer (s’il n’existe pas) un fichier /etc/cron.allow et d’y inscrire le nom de l’utilisateur.
Pour interdire l’accès à crontab pour un utilisateur, il suffit de créer (s’il n’existe pas) un fichier /etc/cron.deny et d’y inscrire le nom de l’utilisateur :
ex :

# cat /etc/cron.deny
adminsys
# crontab -l -u adminsys
The user adminsys cannot use this program (crontab)
Les crontabs périodiques des services

En plus des crontabs utilisateurs, certains services configurent des tâches planifiées grâce aux dossiers /etc/cron.{hourly,daily,weekly,monthly} dans lesquels ils placent leurs scripts à exécuter respectivement tous les heures, jours, semaines et mois. Ajouter un script personnel dans un de ces dossiers suffit à l’automatiser à la fréquence correspondante.

# tree /etc/cron*
/etc/crontab
/etc/cron.allow
/etc/cron.deny
/etc/cron.d
├── anacron
└── php5
/etc/cron.daily
├── 0anacron
├── apache2
├── apt
├── aptitude
├── bsdmainutils
├── cracklib-runtime
├── dpkg
├── exim4-base
├── logrotate
├── man-db
├── mlocate
└── passwd
/etc/cron.hourly
/etc/cron.monthly
└── 0anacron
/etc/cron.weekly
├── 0anacron
└── man-db

Les heures définissant cette périodicité sont configurées dans le fichier /etc/crontab :
ex :

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Ci-dessus :

  • cron.hourly s’exécute toutes les heures passées de 17 minutes (ex : 5h17, 6h17, etc.)
  • cron.daily s’exécute tous les jours à 6h25
  • cron.weekly s’exécute tous les dimanches à 6h47
  • cron.monthly s’exécute tous les 1ers du mois à 6h52
Format des fichiers crontabs

La planification des tâches suit le format suivant :

Minutes Heures Jour du mois Mois Jour de la semaine User Commande
0-59 0-23 1-31 1-12 ou Jan-Dec 0-6 (7) ou Sun-Sat root ou autre PATH/command
m h dom mon dow user command
15 06 02 Jan * user /home/adminsys/backup.sh

Les jours de la semaines (dow) sont définis comme ci-dessous :

  • 0 (ou 7) : dimanche
  • 1 : lundi
  • 2 : mardi
  • 3 : mercredi
  • 4 : jeudi
  • 5 : vendredi
  • 6 : samedi

Plusieurs valeurs, pour un même champs, peuvent être saisies selon le principe suivant :

  • * : intervalle du premier au dernier (toutes les valeurs)
  • X-Y : intervalle de X à Y (bornes comprises)
  • X,Y,Z : liste de valeurs X, Y et Z
  • X/Y : valeur X de pas Y (ex : */2 ou 0-23/2 pour signifier toutes les 2 heures ou heures paires)
Les huit chaînes spéciales

Ce sont des chaînes remplaçant les 5 premiers champs, permettant en un mot de définir une fréquence d’exécution :

Chaine Remplace
m h dom mon dow
Signification
@reboot Exécuter une fois au démarrage
@hourly 0 * * * * Exécuter une fois par heure
@daily 0 0 * * * Exécuter une fois par jour
@midnight 0 0 * * * Identique à @daily
@weekly 0 0 * * 0 Exécuter une fois par semaine
@monthly 0 0 1 * * Exécuter une fois par mois
@yearly 0 0 1 1 * Exécuter une fois par an
@annually 0 0 1 1 * Identique à @yearly

 

Exemples de crontabs

15 6 2 1 * /home/melissa/backup.sh
15 06 02 Jan * /home/melissa/backup.sh
0 9-18 * * * /home/carl/hourly-archive.sh
0 9,18 * * Mon /home/wendy/script.sh
30 22 * * Mon,Tue,Wed,Thu,Fri /usr/local/bin/backup
*/10 * * * * (/home/adminsys/script.sh ; /usr/local/bin/backup) > /tmp/backup.log 2>&1
*/10 * * * * /home/adminsys/script.sh ; /usr/local/bin/backup > /tmp/backup.log 2>&1
* * * * * date >> /tmp/date.log 2>&1
59 23 31 12 * echo "Bonne année !" | mail -s voeux root
0,15,30,45 9-16 * * 1-5 ps -ef >> /tmp/process.log 2>&1
*/15 9-16 * * 1-5 ps -ef >> /tmp/process.log 2>&1

 

Afficher tous les crontabs de l’utilisateur connecté

crontab -l

Affiche les crontabs de root si exécuté en tant que root.
Lit le contenu du fichier /var/spool/cron/crontabs/root si exécuté en tant que root.

 

Afficher tous les crontabs d’un utilisateur spécifique

crontab -l -u username

Lit le contenu du fichier /var/spool/cron/crontabs/username
ex :

# crontab -l -u adminsys

Lit le contenu du fichier /var/spool/cron/crontabs/adminsys.

 

Editer les crontabs de l’utilisateur connecté

crontab -e

Edite les crontabs de root si exécuté en tant que root.
Edite le fichier /var/spool/cron/crontabs/root si exécuté en tant que root.

 

Editer les crontabs d’un utilisateur spécifique

crontab -e -u username

Edite le fichier /var/spool/cron/crontabs/username
ex :

# crontab -e -u adminsys

Edite le fichier /var/spool/cron/crontabs/adminsys.

 

Générer un fichier cron à partir d’un fichier de référence

Pour l’utilisateur connecté :
crontab filename

Génère le fichier /var/spool/cron/crontabs/root, si exécuté en tant que root, en copiant le contenu de filename.

Pour un utilisateur spécifique :
crontab -u username filename

Génère le fichier /var/spool/cron/crontabs/username en copiant le contenu de filename.
ex :

# cat crontab.ref
15 06 02 Jan * /home/adminsys/backup.sh
# crontab -u adminsys crontab.ref
# cat /var/spool/cron/crontabs/adminsys
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (crontab.ref installed on Mon Dec  5 13:39:23 2016)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
15 06 02 Jan * /home/adminsys/backup.sh

 

Supprimer les fichiers crontab d’un utilisateur spécifique

Avec demande de confirmation de la suppression :
crontab -ri -u username

ex :

# crontab -ri -u adminsys
crontab: really delete adminsys's crontab? (y/n) y

Supprime le fichier /var/spool/cron/crontabs/username après confirmation.

Sans demande de confirmation de la suppression :
crontab -r -u username

Supprime le fichier /var/spool/cron/crontabs/username.

 

Reconfigurer l’éditeur par défaut utilisé entre autres par crontab

update-alternatives --config editor

ex :

# update-alternatives --config editor
Il existe 2 choix pour l'alternative editor (qui fournit /usr/bin/editor).

  Sélection   Chemin             Priorité  État
------------------------------------------------------------
  0            /bin/nano           40        mode automatique
  1            /bin/nano           40        mode manuel
* 2            /usr/bin/vim.tiny   10        mode manuel

Appuyez sur  pour conserver la valeur par défaut[*] ou choisissez le numéro sélectionné :0
update-alternatives: utilisation de « /bin/nano » pour fournir « /usr/bin/editor » (editor) en mode automatique
Fermer le menu
%d blogueurs aiment cette page :