Cron

De Linuxmemo.

Version du 1 avril 2019 à 16:31 par Linuxmemo (discuter | contributions)
(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

http://www.cronmaker.com/

http://www.csgnetwork.com/crongen.html

[modifier] Syntaxe crontab

Chaque entrée de la table (chaque ligne) correspond à une tâche à exécuter et est notée de la façon suivante :

mm hh jj MMM JJJ tâche > log

Dans cette syntaxe :

   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 l'abréviation du nom du mois (jan, feb, ...) ou le numéro du mois (de 1 à 12)
   JJJ représente l'abréviation du nom du jour ou le numéro du jour dans la semaine :
       0 = dimanche
       1 = lundi
       ...
       6 = samedi
       7 = dimanche (représenté deux fois pour les deux types de semaine)
   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 un courriel de confirmation. Pour éviter cela, il suffit de spécifier > /dev/null.


*     *     *   *    *        command to be executed
-     -     -   -    -
|     |     |   |    |
|     |     |   |    +----- day of week (0 - 6) (Sunday=0)
|     |     |   +------- month (1 - 12)
|     |     +--------- day of        month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

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

   * : à chaque unité de temps (0, 1, 2, 3, 4...)
   5,8 : les unités de temps 5 et 8
   2-5 : les unités de temps de 2 à 5 (2, 3, 4, 5)
   */3 : toutes les 3 unités de temps (0, 3, 6, 9...)
   10-20/3 : toutes les 3 unités de temps, entre la dixième et la vingtième (10, 13, 16, 19)

Si, sur la même ligne, on trouve précisées une unité de temps « numéro du jour du mois » et une unité de temps « jour de la semaine », celles-ci sont considérées par crontab comme cumulatives.

Raccourcis Description Équivalent
@reboot Au démarrage Aucun
@yearly Tous les ans 0 0 1 1 *
@annually Tous les ans 0 0 1 1 *
@monthly Tous les mois 0 0 1 * *
@weekly Toutes les semaines 0 0 * * 0
@daily Tous les jours 0 0 * * *
@midnight Tous les jours 0 0 * * *
@hourly Toutes les heures 0 * * * *

[modifier] Dépannage

Dans les répertoires /etc/cron.xxxx/ qui sont exécutés par la commande "run-parts", les nons de script doivent avoir une syntaxe bien particulière sous peine de ne pas etre lancé. man: ...le nom satisfait les contraintes décrites ci-dessous. Les autres fichiers sont ignorés.

  • les noms ne doivent être constitués que de lettres minuscules ou majuscules, de chiffres, de tirets bas (« underscore ») ou de tirets.
  • assurez-vous d’avoir mis en première ligne ‘#!/bin/sh‘
  • assurez-vous que le nom du script ne contiens pas de ‘.’. par exemple, vous devriez renommer ‘monscript.sh‘ en ‘monscript‘
  • utilisez les chemins absolus si vous devez lire/écrire dans un fichier depuis le script
  • essayez de lancer le script depuis le terminal pour vérifier qu’il n’y a pas de problème évident
  • run-parts –test /etc/cron.hourly/‘ vous dira quels sont les scripts qui seront lancés, vous devriez voir votre script dans la liste
  • essayez de le lancer comme cron, par exemple :
cd / && run-parts –report /etc/cron.hourly
cron utilise syslog pour enregistrer les logs.
Vérifiez le fichier de configuration (/etc/syslog.conf) pour voir où vont les logs et vérifiez les pour trouver les erreurs.
ou
run-parts --test /etc/cron.daily
run-parts --list /etc/cron.daily

The jobs in cron.d and /etc/crontab are system jobs, which are used usually for more than one user, thus, additionally the username is needed. MAILTO on the first line is optional.

crontab files have to be regular files or symlinks to regular files, they must not be executable or writable for anyone else but the owner.

Test de la définition: http://cron.schlitt.info/

[modifier] Anacron

First, make sure that your anacrontab file has valid syntax. If you see nothing, then it's fine:

/usr/sbin/anacron -T

Finally see if anacron's scheduling system is working correctly. You can do this with:

/usr/sbin/anacron -n -f cron.monthly
(-n means Run jobs now, -f means force, ignoring timestamps).
Outils personnels