Table des matières
Crontab
Edition
Editeur par défaut
Le choix de l'éditeur se fait lors de la première utilisation ou bien par la commande :
select-editor
Vérification par la commande :
cat .selected_editor
Action sur la crontab
| Commande | Fonction |
|---|---|
| crontab -l | visualisation de la crontab |
| crontab -e | édition de la crontab |
| crontab -r | suppression de la crontab |
| crontab -e -u user | édition de la contab de l'utilisateur user |
| sudo crontab -e | édition de la crontab root |
Vérifier le service
Exemples
Tous les jours à 4h45
45 4 * * * /root/script.pl
Tous les week-end à 4h50
50 4 * * 6,7 /root/script.pl
Tous les 1er mai à 4h50
50 4 1 5 * /root/script.pl
Toutes les 5 mn le soir entre 20h et 24h
*/5 20-23 * * * /root/script.pl
Au redémarrage de la machine
Juste après le redémarrage
@reboot /root/script.pl
5 mn après le redémarrage
Modification sans éditeur
Localisation des fichiers
Chaque fichier crontab porte le nom de l'utilisateur en plus de l'utilisateur root.
Ubuntu
Les fichiers se trouvent sous /var/spool/cron/crontabs
Redhat/CentOS
Les fichiers se trouvent sous /var/spool/cron
Création
cat << tagFIN > nomdufichier ... ... tagFIN
taper les lignes au fur et à mesure en finissant par la dernière : tagFIN
Ajout
cat << tagFIN >> nomdufichier ... ... tagFIN
taper les lignes au fur et à mesure en finissant par la dernière : tagFIN
Dépannage
You are not allowed to use this program (crontab)
- Vérifier que l'utilisateur n'est pas présent dans le fichier /etc/cron.deny
- Si nécessaire ajouter le nom de l'utilisateur dans le fichier /etc/cron.allow
Envoi de mail
Il est possible de positionner la variable MAILTO en début de crontab
MAILTO="" # pour éviter de recevoir des mails dans la boite de l'utilisateur MAILTO="toto@machin.fr" # pour rediriger vers une autre boite mail
Process zombie
Pour éviter la présence de process zombie en cas d'échec il convient de rediriger la sortie standard et d'erreur
* * * * * /chemin/script.sh >> /var/log/monscript.log 2>&1
Execution ne fonctionne pas sous cron
Il arrive souvent qu'un script qui fonctionne parfaitement en interactif ne fonctionne plus quand on essaye de l'exécuter via une tâche sous cron.
Variables d'environnement
Lors de l'exécution sous cron, en non interactif, l'environnement utilisateur n'est pas initialisé et donc certaines variables d'environnements ne sont pas initialisées. Par exemple la variable PATH est minimale (/usr/bin et /bin seulement).
- Indiquer le chemin complet pour faire appel à un programme
- Ajouter le chemin à la variable PATH dans la crontab
*/5 20-23 * * * PATH=<liste:des:chemins:indispensables>; /root/script.pl
droits sudo
Pour pouvoir utiliser la commande sudo dans un script exécuté sous cron il faut pouvoir utiliser la commande sans mot de passe (voir sudo). Sinon le script s'exécute sans s'arrêter pour demander le mot de passe, sans erreur mais sans exécuter la commande.
Investigations
Pour debbuger un script sous cron ajouter des redirections de la console standard et d'erreur :
*/5 20-23 * * * /root/script.pl > /tmp/stdout.log 2>/tmp/stderr.log
