cron-tasks
Programmer des tâches avec CRON
1 Qu'est-ce que Cron
Cron est un programme pour éxécuter automatiquement des scripts, des commandes ou des logiciels à une date et une heure spécifiée précise, ou dans un cycle défini à l'avance.
Chaque utilisateur a un fichier crontab, lui permettant d'indiquer les actions à éxécuter.
CRON est un exécuteur de tâches automatique pour une période donnée.
2 Comment fonctionne CRON
Les tâches planifiées cron sont définies au niveau du système dans le fichier
/etc/crontab et dans le dossier /etc/cron.d/
Pour modifier vos tâches planifiées tapez:
crontab -e (lance un éditeur du fichier crontab)
crontab -e
Les tâches définies dans crontab sont par principe exécutées par root sans demande de mot de passe. Cela permet d'exécuter potentiellement n'importe quelle tâche système, d'où un certain risque.
[infos]
soyez prudent, et abstenez-vous si vous ne maîtrisez pas bien ce que vous faites.
[structure-cron] Voici une courte description de la structure d'une entrée dans un fichier crontab. Les champs à renseigner sont dans l'ordre (un champ qu'on ne souhaite pas renseigner doit être rempli avec une *) :
1er | 2nd | 3ème | 4ème | 5ème | |
---|---|---|---|---|---|
* | * | * | * | * | |
id | minute | heure | jour dans le mois | mois | jour de la semaine |
valeur | 0-59 | 0-23 | 1-31 | 1-12 ou jan, feb, mar… | 1-7 ou mon, tue, wed… |
[valeurs-cron]
minute de lancement (les minutes de 0 à 59) heure de lancement (les heures de 0 à 23) jours dans le mois de lancement (les jours se numérotes de 1 à 31) mois de lancement (les mois se numérotent de 1 à 12, ou s'énoncent par leur libellé abrégé anglais - jan ; feb ; mar ; apr ; …) jour de la semaine de lancement (les jours se numérotent de 1 (lundi) à 7 (dimanche), ou s'énoncent par leur libellé abrégé anglais - sun ; mon ; tue ; wed ; thu ; fri ; sat) La commande à lancer.
[pratique-infos]
Si jour
du mois
et mois sont définis, jour de la semaine n'est pas nécessaire. Cependant, si le champ est indiqué en plus, la commande sera exécutée à la date jour du mois et mois mais AUSSI tous les jour de la semaine définis. Exemple avec
0 0 13 1 5 npm run build
La tâche: npm run build ici sera exécutée 0mm
et 0H
après le démarrage, le 13ème du jour du 1er mois de (janvier)
et tous les vendredis (5ème jour de la semaine)
Exemple:
—- L'exemple ci-dessous exécutera /usr/bin/apt-get update à 3:05 (5e minute de la 3e heure), chaque jour de chaque mois (les * dans "jour", "mois" et "jours de la semaine"), avec les droits de l'utilisateur nomdutilisateur.
5 3 * * * nomdutilisateur /usr/bin/apt-get update
—- Vous pouvez faire tourner cron toutes les 5 minutes, entre 9H à 17H, et uniquement du lundi au vendredi, avec un message "Où en es tu ?" (on met * pour les colonnes "jour dans le mois" et "mois", puisqu'on utilise pas ces données) :
*/5 9-17 * * mon,tue,wed,thu,fri wall "Où en es tu ?"
ou vous rappeler un anniversaire à 9h du matin le 10 janvier chaque année :
0 9 10 jan * echo "C'est l'anniversaire de ta Maman aujourd'hui !" >>~/readme
Il existe des raccourcis intéressants :
[variables]
@reboot # se lance au boot avec les droits utilisateurs, bien commode @yearly @annually @monthly @weekly @daily @midnight @hourly
Exemples de lancements de tâches :
chaque demie-heure (*/30 est une instruction, pas deux)
*/30 * * * * commande
chaque heure, au début de l'heure (0 minute au démarrage de l'heure) :
0 * * * * commande
chaque heure, à la 30e minute de l'heure :
30 * * * * commande
chaque heure, mais uniquement entre 9h00 et 5h00
0 9-5 * * * commande
Vous pouvez générer le code grâce à ces outils en ligne
[generate-code] code-contrab [generate-code] code-contrab-Generator [generate-code] code-contrab-CronMaker
Commandes pour gérer les tâches planifiées Cron
Pour examiner les tâches planifiées de l'utilisateur courant (le contenu de votre crontab), tapez :
crontab -l
Pour modifier vos tâches planifiées tapez :
crontab -e
et pour modifier celles d'un autre utilisateur :
sudo crontab -e -u nom_utilisateur
Quand vous sortez de l'éditeur, le nouveau fichier crontab sera installé. Le fichier est stocké dans */var/spool/cron/crontabs/user mais doit seulement être modifié par l'intermédiaire de la commande crontab.
L'éditeur utilisé pour modifier la crontab peut être modifié par la commande :
sudo update-alternatives --config editor
ou par un :
select-editor
Lancement graphique
Par défaut, l'exécution de cron n'affiche rien. Si vous avez besoin de démarrer une interface graphique par exemple pour utiliser
[tools-zenity,] zenity
Tests
Il est important de vérifier que vos travaux dans cron fonctionnent comme prévu. Une méthode pour faire un test est de paramétrer la tâche dans le crontab pour qu'elle s'exécute quelques minutes plus tard et contrôler le résultat, avant de mettre la synchronisation de cette tâche à la bonne heure. Vous pouvez également trouver utile d'envoyer les retours des commandes dans un fichier texte pour voir les succès ou les échecs, par exemple :
echo "Sauvegarde de nuit: $(date)" >>/tmp/mybackup.log
Une autre façon de contrôler la bonne exécution des tâches cron est d'utiliser sa capacité à envoyer des courriels. Pour cela il suffit de renseigner la variable MAILTO dans votre fichier crontab, exemple :
MAILTO="test@example.com"
Log
Par défaut on retrouve des logs de commandes CRON dans /var/log/syslog mais ce n'est pas très pratique. Pour activer le log spécifique de CRON: Éditer le fichier /etc/rsyslog.d/50-default.conf qui est appelé par /etc/rsyslog.conf et décommenter la ligne
cron.* /var/log/cron.log
Relancer rsyslog et cron
sudo systemctl restart rsyslog
sudo systemctl restart cron
Il ne reste plus qu'à surveiller les logs de CRON:
sudo tail -f /var/log/cron.log
et si vous voulez des tâches silencieuses 1), ajouter à la fin de vos lignes CRON
/dev/null 2>&1
[cron-lien] cron
[tuto-cron] autre-liens