Automatiser ses actions avec les tâches CRON
Introduction
Cron, qui est la troncation de crontab, lui-même troncation de chrono table, est un programme en mode daemon présent sur Linux qui a pour rôle d’exécuter des scripts planifiés. Il est possible avec ce programme d’exécuter une tâche ponctuelle ou cyclique.
Le service Cron porte le nom de « crond ».
Cron permet de créer des cycles simples (journalier, hebdomadaire, mensuel…) et des cycles plus complexes (le 15 du mois à 17h05, un jour sur deux, les semaines paires d’un mois impair…).
Principe de fonctionnement
Pour ouvrir le programme Cron :
#crontab -e
Sur certains systèmes, lors de la première ouverture, il vous est demandé de choisir un éditeur :
Choisissez alors l’éditeur avec lequel vous avez l’habitude de travailler.
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.tiny
Choose 1-2 [1]:
Le service cron est lancé avec le compte Root afin d’avoir des droits suffisamment élevés pour certaines tâches. Sous certains Unix, même lorsque la tâche est désactivée (kill) le programme est automatiquement relancé par le système.
La commande /usr/bin/crontab est, en principe, réservée à Root. On peut toutefois l’autoriser à certains utilisateurs. Pour cela, on dresse la liste des utilisateurs autorisés dans /etc/crond.allow. De la même manière, on peut mettre dans /etc/crond.deny la liste des utilisateurs non autorisés.
Mettre en place sa tâche planifiée
Une fois le fichier ouvert, il ne vous reste plus qu’à entrer les 6 champs dans l’ordre suivant :
Minute (de 0 à 59)
Heure (de 0 à 23)
Jour du mois (de 1 à 31)
Numéro du mois (de 1 à 12)
Jour de la semaine (0 à 6) Attention : 0 = Dimanche, 1 = Lundi, […], 6 = Samedi
Commande, telle qu’elle serait saisie en shell
Remarques
Les 5 premiers champs peuvent prendre les valeurs suivantes :
Un unique nombre entier et valide dans la tranche.
Une liste de nombres entiers et valides dans la tranche (par exemple 1,3,5 dans le champ « mois » exécutera la tâche en Janvier, Mars et Mai).
Un intervalle de nombres entiers valides dans la tranche (par exemple 1-5 dans le champ « jour » exécutera la tâche du Lundi au Vendredi).
Le symbole * signifie « toutes les valeurs possibles du champ » (par exemple * dans le champ « heure » exécutera la tâche toutes les heures).
Le symbole /<nb unités> découpe la valeur, la liste ou l’intervalle en nombre d’unités.
Exemples d'utilisation
*/5 dans le champ « minutes » signifie « toutes les 5 minutes »
*/3 dans le champ « mois » signifie « tous les trimestres »
10-18/2 dans le champ « heure » signifie « toutes les 2 heures entre 10h et 18h »
Exécution du script « backup.sh » tous les jours à 5h15 du matin :
15 5 * * * /root/backup.sh
Éteindre le poste en fin de journée du lundi au vendredi (-r affiche un message de shutdown imminent et demande confirmation à l’utilisateur)
30 18 * * 1-5 /sbin/shutdown -r
Un peu plus complet : Ajoute la ligne « Vive les vacances ! » dans le fichier « congés » de Paul toutes les demis-heure entre 15h et 19h tous les 2 jours lors des 2 premières semaines de Juillet – Aout
*/30 15-19 1-15 7,8 */2 echo "Vive les vacances !" >> /home/paul/congés
Enregistrez et quittez. Puis vérifier la saisie avec la commande :
#crontab -l
Pour supprimer toutes les tâches planifiées :
#crontab -r
Les raccourcis
@reboot Au démarrage n/a
@yearly Tous les ans 0 0 1 1 *
Sauvegarde avec la commande TAR et Cron
Fonctionnement de la commande TAR :
tar -czfs <fichier>.tar.gz <fichier1> <fichier2> <dossier1> <...>
On souhaite sauvegarder tous les vendredis soir à 23h30 tout le répertoire /data/finances présent sur le serveur en production vers un fichier compressé « backup_finance.tar.gz » présent dans le dossier de sauvegardes.
Ouverture du programme Cron :
#crontab -e
On crée la tâche de compression et de sauvegarde :
30 23 * * 5 tar -czvf /backup/backup_finance.tar.gz /data/finances
Aller plus loin...
Commandes utiles
Ces commandes ne fonctionnement pas pour toutes les distributions Linux et Unix
Indique l’horaire de la dernière tâche exécutée pour l’ensemble des utilisateurs :
#ls -lut /etc/init.d/cron
Extrait du journal du système les informations concernant la table Cron :
grep -w cron /var/log/syslog
Rechargement du deamon Cron :
/etc/init.d/cron force-reload
Changement d'heure
Lors du passage de l’heure d’hiver à l’heure d’été, l’heure officielle passe de 2h à 3h. Les tâches programmées entre 02h00 et 02h59 ne seront pas exécutées.
Lors du passage de l’heure d’été à l’heure d’hiver, l’heure officielle passe de 02h59 à 02h00. Les tâches programmées entre 02h00 et 02h59 seront donc exécutées deux fois.
Afin d’éviter les problèmes qui pourraient survenir, il est recommandé de mettre votre système en Temps Universel Coordonné (UTC) qui n’est pas sujet à ces règles de changement d’heure.
Les Forks Linux de Cron
Mcron : Supporte la mise en place des tâches planifiées traditionnelles mais également les fichiers de configuration écrits en Scheme. Il permet ainsi d’ajouter le conditionnel.
Par exemple : si la charge des disques est trop importante le lundi entre 10h et 12h, supprime les fichiers /tmp
Anacron : Très similaire à Cron, à la différence qu’il ne suppose pas que la machine tourne en permanence. Il peut donc être utilisé sur des systèmes qui ne tournent pas 24h/24h. À la différence de Cron, ce n’est pas un deamon, il tourne que s’il y a des tâches à exécuter.
Si lors du démarrage de la machine, des tâches devaient être faites alors que la machine était éteinte, il lance ces tâches au démarrage.
Fcron : Fusion de Cron et Anacron avec des fonctionnalités supplémentaires. On rencontre une syntaxe Crontab plus évolué. Il est aussi possible d’interagir avec le deamon via une commande fcrondyn pour savoir ce qu’il fait ou ce qu’il fera.