Dernière modification le 08/08/2021

Effectuer une tâche cyclique

Le service “Cron” permet d’exécuter des tâches cycliques.
Toutes les minutes le “cron” vérifie s’il doit exécuter une tâche.
L’outil “Crontab” va nous permettre d’éditer la liste des tâches à effectuer et aussi le temps entre deux exécutions.
La syntaxe de la commande est la suivante :

crontab [-u utilisateur] [-l | -r | -e] [-i]

Les options sont :

Ajouter une tâche

Exécuter la commande suivante :

crontab -e

La commande vous demande alors quel éditeur vous souhaitez utiliser :

pi@raspberrypi:~ $ crontab -e
no crontab for pi - using an empty one

Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.tiny

Choose 1-3 [2]:

L’éditeur démarre et affiche le contenu du gestionnaire de tâche, pour l’utilisateur courant :

Comme dans beaucoups de fichier de configuration les ligne qui commence par “#” sont des commentaires.
Placez votre curseur en fin de fichier et entrez la commande suivante :

* * * * * date >> /home/pi/test

Enregistrez et quittez l’éditeur.
La commande “date >> /home/pi/test” sera exécutée toutes les minutes. Après quelques minutes le fichier “test” comportera x ligne avec la date.
La ligne est composée de deux parties :

Les 5 étoiles permettent de configurer le temps de cycle d’exécution de la commande. Voici l’explication de chaque étoiles :

Quelques exemples :

0 0 * * 2 commande

La commande sera exécutée tous les mardis à 0h00.

0 10,20 * * * commande

La commande sera exécutée tous les jours à 10h00 et 20h00.

0 0 * * 1-5 commande

La commande sera exécutée la semaine et pas le week-end à 0h00.

0 */2 * * * commande

La commande sera exécutée tous les 2 heures, donc 2h, 4h, 8h, …

@reboot commande

La commande sera exécutée au démarrage du raspberry.

Déboguer

Évidemment, il est possible que l’exécution de la commande ne se passe pas bien. Récupérer dans un fichier le texte généré par la commande à son exécution :

@reboot /home/pi/test.sh > /home/pi/log_test.txt

Cette méthode va écraser le fichier à chaque exécution, ce n’est pas l’idéal pour identifier un problème.
Pour ajouter le texte à la fin du fichier, utilisez alors le symbole « >> » comme ceci :

@reboot /home/pi/test.sh >> /home/pi/log_test.txt

Il est aussi possible d’enregistrer dans un fichier les erreurs du script, vous pouvez le faire comme cela :

reboot /home/pi/test.sh > /home/pi/log_test.txt 2>/home/pi/errors_test.txt

Syslog

Syslog est une autre aide précieuse lorsqu’il s’agit d’identifier un problème avec une tâche planifiée, ce fichier de log est “/var/log/syslog”.
Vous pouvez afficher les derniers messages d’erreurs en continu avec cette commande :

tail -f /var/log/syslog | grep CRON

Cela affichera uniquement les dernières erreurs, avec une actualisation automatique lorsqu'une nouvelle tâche se lance.