My Personal Wiki

La théorie, c'est quand on sait tout et que rien ne fonctionne.... La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

Outils pour utilisateurs

Outils du site


linux:commande:shell:crontab

Utilisation de crontab


Syntaxe

Afin d'éditer la table cron, il suffit d'exécuter la commande suivante:

crontab -e

Qui lancera l'éditeur par défaut (souvent vi) présentant la table actuelle (ou un fichier vide s'il s'agit du premier lancement de crontab). Chaque ligne du fichier correspond à une tâche à exécuter, renseignée de la manière suivante:

mm hh jj MMM JJJ tâche > log

Où:

  • mm représente les minutes (de 0 à 59)
  • hh représente l'heure (de 0 à 23)
  • jj représente le numéro du jour du mois (de 1 à 31)
  • MMM représente le numéro du mois (de 1 à 12) ou l'abréviation du nom du mois (jan, feb, mar, apr, …)
  • JJJ représente l'abréviation du nom du jour ou le chiffre correspondant au jour de la semaine (0 représente le dimanche, 1 représente le lundi, …)
  • tâche représente la commande ou le script shell à exécuter
  • log représente le nom d'un fichier dans lequel stocker le journal des opérations. Si la clause > log n'est pas spécifiée, cron enverra automatiquement un mail de confirmation. Pour éviter cela il suffit de spécifier > /dev/null

Note

Pour chaque unité de temps (minute/heure/…) les notations sont possibles:

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

Exemples

Imaginons que l'on souhaite mettre en place un journal automatisé (dans le fichier /logs/log_df.log par exemple) de l'espace disque libre (commande df) à des intervalles de temps précis:

Tous les jours à 23h30:

          30 23 * * * df >> /logs/log_df.log

Toutes les heures, passées de 5 minutes :

          5 * * * * df >> /logs/log_df.log

Tous les premiers du mois à 23h30:

          30 23 1 * * df >> /logs/log_df.log

Tous les lundis à 22h28:

          28 22 * * 1 df >> /logs/log_df.log

Du 2 au 5 de chaque mois à 10h12:

          12 10 2-5 * * df >> /logs/log_df.log

Tous les jours pairs du mois à 23h59:

          59 23 */2 * * df >> /logs/log_df.log

Toutes les 5 minutes:

  • */5 * * * * df » /logs/log_df.log

Il est également possible d'exécuter automatiquement des commandes plus complexes à l'aide d'un script shell.
Il suffit pour cela de le déclarer en tant que tâche dans la table cron.


Redirection Erreur

Le Cas de dead.letter

c’est quoi >/dev/null?

/dev/null représente le rien.
Ce rien peut être comparé à un trou noir dans l’espace.
Ce qui à pour conséquence, que chaque flux envoyé dans ce trou noir ne pourra jamais être récupéré.

exemple de commande avec >/dev/null dans un crontab:

***4* /home/fred/script/test.sh >/dev/null

Chaques taches planifiées dans un crontab envoient un mail à l’administrateur du système(ou root), pour éviter l’envoie systématique on redirige tout le flux STDOUT dans /dev/null.
A savoir, que lorsque /dev/null est utilisé sans précision, seule la sortie du flux STDOUT est concernée.
Donc, si une erreur se produit l’administrateur sera prévenue grâce à la sortie STDERR.

c’est quoi < /dev/null?

Dans un script, il se peut qu’une commande est besoin d’une intervention humaine pour répondre à une question généralement yes ou no(y/n).

Forcer la réponse à yes

Ajouter l’option -f, exemple:

cp -f ficher1 directory/

La copie du fichier1 dans le répertoire directory est forcée.

Forcer la réponse à no

< /dev/null sera utilisé, exemple:

cp  ficher1 /directory </dev/null

Si le fichier1 existe déjà dans le répertoire, avec l’option < /dev/null, le script n’écrasera pas le fichier1 déjà présent dans directory.

c’est quoi /dev/null 2>&1

2>&1 redirige la sortie d’erreur(STDERR) vers la sortie standard(STDOUT) et la sortie STDOUT dans /dev/null.

exemple en reprenant celui de la tache cron:

*4*** /home/fred/script/test.sh >/dev/null 2>&1

Dans ce cas, l’administrateur ou root ne sera jamais si la commande c’est bien exécutées ou pas.
Sauf, si le test est prévue dans le scripte test.sh.


sylvain 2020/02/22 18:18

linux/commande/shell/crontab.txt · Dernière modification : (modification externe)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki