Cron et Crontab

La crontab est le programme utilisé pour configurer les tables utilisées par le daemon cron. Chaque utilisateur sur le système peut avoir sa propre crontab et il est possible d’établir des restrictions d’utilisation.

La commande crontab s’utilise comme tel :

crontab [ -u user ] file
crontab [ -u user ] [ -i ] { -e | -l | -r }

Le répertoire /var/spool/cron/crontabs, contient tous les fichiers crontabs de chaque utilisateur, ils ne sont cependant pas destinés à être modifiés directement ici.

# ls -l /var/spool/cron/crontabs/
Arya
Ned
root
Tyrion

Les autres crons lancés par le système se trouvent dans : /etc/crontab, /etc/cron.d, /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly.

Autorisations et interdictions pour les utilisateurs

Pour les systèmes Debian standards, tous les utilisateurs peuvent utiliser la commande crontab par défaut, il est cependant possible de modifier les droits à l’aide d’une liste blanche ou d’une liste noire.

Par liste blanche

Il sera nécessaire de créer un fichier /etc/cron.allow et y placer ligne par ligne les utilisateurs autorisés à utiliser la commande crontab

Par liste noire

Il faut créer un fichier /etc/cron.deny et y placer ligne par ligne les utilisateurs non autorisés à utiliser la commande crontab

️ Aucun fichier n’est présent

Si aucun de ces fichiers n’est présent alors selon la configuration du serveur ou de la distribution il sera possible que :

  • Soit uniquement le super utilisateur sera autorisé à utiliser crontab
  • Soit tous les utilisateurs pourront utiliser crontab

Les deux fichiers sont présents

Si les deux fichiers existent /etc/cron.allow sera prioritaire. Donc :

  • /etc/cron.deny ne sera pas pris en compte
  • L’utilisateur devra figurer dans /etc/cron.allow pour utiliser crontab

Manipuler la crontab

Si l’option -u <utilisateur> n’est pas précisée, crontab examinera votre crontab (celle de l’utilisateur qui exécute la commande)

Résumé des options

La commande s’utilise comme tel :

crontab [ -u user ] [ -i ] { -e | -l | -r }
  • -l : Affiche la crontab
  • -e : Editer la crontab
  • -r : Supprime la crontab
  • -ir: Supprime la crontab en demandant une confirmation

Exemple : Lister les tâches existantes

Pour avoir un aperçu de ce que contient votre table cron, il faut utiliser la commande :

# crontab -l

30 12 * * * /root/scripts/BackupHome.sh
30 00 * * * uptime >> /root/test.txt

Pour avoir un aperçu de ce que contient la table de l’utilisatrice Arya, il faut utiliser la commande :

# crontab -u Arya -l

00 12 1 * * /home/Arya/ValarMorghulis.sh
00 23 * * * /home/Arya/DeadListUpdate.sh

Changer d’éditeur par défaut

En ouvrant la crontab, on tombe généralement sur l’éditeur nano, pour ceux qui ne sont pas familier avec il est possible d’en mettre un autre par défaut en modifiant la variable d’environnement VISUAL ou EDITOR par exemple avec Vi sous Debian :

# EDITOR=vi;export EDITOR

Syntaxe de la table

La syntaxe générique de la crontab :

#------------------------------------------------------#
mm hh jj MMM JJJ scripts/monscript.sh

Signification :

mm    # les minutes (0-59)
hh # l'heure (0-23)
jj # le jour (1-31)
MMM # le mois (jan, feb, ... ou de 1 à 12)
JJJ # je jour de la semaine (mon, thu, ... ou de 0 à 7 (0 et 7 sont pour Sun))

Combinaisons de valeurs possibles :

*       # signifie tout le temps
5,8 # sera lancé le 5 et 8
2-5 # sera lancé de 2 à 5 (2, 3, 4, 5)
*/3 # sera lancé toutes les 3 unités (0, 3, 6, 9...)
9-20/3 # sera lancé toutes les 3 unités, entre la dixième et la vingtième (9, 12, 15, 18)

Normalement on devrait pouvoir tout prévoir… ou presque

Comment lancer un cron toutes les X secondes ?

On ne peut pas, ce n’est pas prévu pour ça, cependant il est possible de lancer un script bash qui se chargera de compter les secondes :

#!/bin/bash
while true
do
script_a_lancer
sleep n
done

Les fichiers de logs

Les logs de cron se trouvent dans /var/log/syslog. On utilise grep pour les filtrer.

# cat /var/log/syslog | grep cron

Anacron

Pour les machines ne fonctionnant pas 24h/24h, anacron permet de lancer les commandes qui auraient dû s’exécuter si la machine avait été allumée.

Liens pour No0bs

https://crontab.guru

> Partager <