Signaux & processus

CRON

Le service cron (ou crond selon les distributions) permet d’exécuter des commandes périodiques, comme par exemple, supprimer automatiquement les fichiers temporaires (/tmp, /var/tmp) afin d’éviter la saturation des disques.

Objectifs de cron

  • Il est chargé de faire exécuter par le système toutes tâches (commandes et scripts) définies et planifiées à l’avance
  • Les tâches allouées à cron sont définies à une heure fixe et peuvent être périodiques.
  • Son usage est plutôt employé par root (le super-Utilisateur ) mais il est possible en créant un fichier incorporant la liste des utilisateurs autorisés. (Ce fichier doit sappeler allow et doit se trouver dans « /etc» soit « /etc/cron.allow »).
  • Sa configuration se fait en tapant la commande crontab -e. L’option «  -e» représente la demande de configuration de cron sur lutilisateur en cours de session. Pour être plus clair, chaque utilisateur ainsi que root possèdent leur propre fichier de configuration.

Fonctionnement de cron/anacron

Normalement cron est lancé automatiquement au démarrage. Nous pouvons cependant le faire démarrer manuellement en allant dans le répertoire « /init.d » 

4 commandes possibles :

  • /etc/init.d/cron stop (Arrête le service cron)
  • /etc/init.d/cron start (Démarre le service cron)
  • /etc/init.d/cron restart (Arrête et redémarre le service cron)
  • via systemctl, pour les Linux utilisant systemd.

Lorsque cron s’exécute pour une tâche il inscrit dans un de ses fichiers log certaines données. Ces fichiers se trouvent dans « /var/log/cron/ » et sont au nombre de 3 :

  • info (cron indique la tâche réussie)
  • warnings (cron indique les problème rencontrés, ligne(s) ignorée(s), etc.)
  • errors (cron indique qu`il n`a pas pu réaliser sa tâche)

Evidemment, au fil du temps le fichier info se garnit et peut prendre de la place inutilement, il faut donc le vider de temps en temps.

Crontab et ses options

4 options existent :

  • crontab -l (Affiche le fichier crontab de lutilisateur en cours de session)
  • crontab -l -u rudy (Affiche le fichier crontab de lutilisateur « rudy »)
  • crontab -r (Efface le fichier crontab de lutilisateur en cours de session)
  • crontab -e (Edition du fichier crontab personnel)

Syntaxe de crontab

Pour créer une tâche, éditer le fichier crontab.

cat /etc/crontab

Chaque ligne contient 6 champs, les 5 premiers ( 59 * * * * dans lexemple ) vont déterminer les moments de l’exécution des tâches, ce sont les « champs temporels ». Ainsi le 6ème champ va correspondre à la tâche à exécuter.

  • 1er champ : Représente les minutes ( de 0 à 59 )
  • 2ème champ : Représente les heures ( de 0 à 23 )
  • 3ème champ : Représente les jours du mois ( de 1 à 31 )
  • 4ème champ : Représente les mois de l’année ( de 1 à 12 )
  • 5ème champ : Représente les jours de la semaine ( de 0 à 6 : dimanche = 0 )

 Chaque « champ temporel » peut contenir :

  • Une valeur précise (par exemple 20)
  • Une liste de valeur séparées par une virgule (1,4,5 ou mars,avril,mai uniquement pour le champ mois.)
  • Un intervalle grâce à un trait dunion (1-4 pourrait représenter du lundi au jeudi dans le champ jour)
  • «  *»  correspond à « toutes valeurs possibles ». Si dans le champ jour un « * » est placée, alors la tâche sera réalisée tous les jours.
  • «  /»  peut permettre plus dinformation : «  */15 » dans le champ minute indiquera «  toutes les 15 minutes » ou « 0-23/3 » dans le champ heure indiquera « toutes les 3 heures ».

 Les commandes exécutées par cron le sont comme tâches de fond. Leur sortie standard nest donc pas branchée sur un terminal. Cron redirige la sortie standard et envoie le résultat (s’il y a un résultat) par mail à l’utilisateur spécifié par le variable « MAILTO».

Exemples:

Lancer une tâche le 1er et 15 du mois à minuit : 0 0 1,15 * * tâche à lancer

 Rebooter la machine une fois par mois, le 7, à 3h du matin : 0 3 7 * * /sbin/shutdown -r

Lancer un script tous les mardis à 3 h 30 du matin : 30 3 * * 2 /usr/monscript

Lancer un script tous les matins, du lundi au vendredi à 6h15 : 15 6 * * 1-5 /home/monscript

Lancer une tâche tous les 1/4 d’heure de 15h à 18h, du lundi au vendredi et cela, seulement la 1ère quinzaine du 3ème trimestre : 0,15,30,45 15-18 1-15 7-9 1-5 /usr/ma tâche

Une commande directe : trouver puis supprimer du répertoire /tmp les fichiers non modifiés et datant de plus de 31 jours. La tâche se fera tous les 1er de chaque mois à 2h du matin :

0 2 1 * * find /tmp -atime 31 -exec rm -f {} ;

Exécution différée de commande : at

Le service atd est similaire au service cron, mais n’exécute les commandes quune seule fois (pas de répétition).

La commande at permet dajouter une commande à la liste des commandes différées :

  • date
  • at 12:00

at lit les commandes à exécuter sur l’entrée standard. Pour fermer l’entrée standard, utilisez Ctrl+D. Remarque : dans ce mode interactif, vous pouvez exécuter plusieurs commandes (qui peuvent alors former un script shell!).

L’argument pour la commande at peut prendre différentes formes :

  • 14 :00
  • 2 :00pm
  • 23 :59 December 24
  • 14 Thursday
  • Now + 2 hours
  • Midnight – 5 minutes

Vous pouvez aussi utiliser un redirection :

echo ‘’echo ‘café !!’ ‘’ | at 16 :00

La commande atq permet de voir la liste des commandes différées programmées :

atq

Le root peut demander la liste des commandes différées dun utilisateur en particulier (atq user).

La commande atrm permet de supprimer une commande différée en fournissant son numéro de job :

atrm 1

atq

Remarque : Le root peut limiter laccès à la commande at en définissant les fichiers /etc/at.allow et /etc/at.deny.
Print Friendly, PDF & Email