Programmer des tâches avec FCRON

FCron est un daemon utilisé pour programmer des tâches devant être exécutées à un moment précis ou au contraire périodiquement. Chaque utilisateur a un fichier fcrontab, lui permettant d'indiquer les actions et à quelles périodes elles devront être exécutées. FCron a pour but de remplacer le couple Cron - Anacron, et d'en faire un unique logiciel intégré.

FCron permet de pallier les défauts de Cron et d'Anacron : contrairement à eux si jamais l'ordinateur est éteint FCron relance la tâche au démarrage (ce que ne permet pas Cron) et si l'ordinateur est allumé il la lance (ce que ne permet pas Anacron).

De plus la syntaxe de FCron, bien que compatible avec celle de Cron et d'Anacron, est bien plus évoluée et ajoute de nouvelles possibilités pour paramétrer le comportement du planificateur de tâches..

  • Disposer des droits d'administration ;
  • Disposer d'une connexion à Internet configurée et activée ;
  • Avoir activé désinstallé anacron. (?)

Compilez le paquet à partir des sources disponibles ici. (une installation de sendmail pourra être nécessaire).

Ex : pour lancer un script toutes les 10 heures :

fcrontab -e

Ecrivez dedans :

@ 10h /home/utilisateur/script.sh

Faire CTRL + O pour enregistrer puis CTRL + X pour quitter

Pour éditer le fichier de votre fcrontab, tapez :

fcrontab -e

Pour regarder le contenu de votre fcrontab, tapez :

fcrontab -l

Quand vous sortez de l'éditeur, le nouveau fichier pour fcron sera installé. Les instructions générées avec fcrontab sont stockées sous la forme de 2 fichiers. Le répertoire d'accueil des fichiers est indiqué dans /etc/fcron.conf, c'est habituellement /var/spool/fcron . L'un des fichiers est écrit au format texte et il est nommé <user>.orig (<user> étant le nom de l'utilisateur qui lance fcrontab), mais doit seulement être édité par l'intermédiaire de la commande fcrontab. L'autre fichier est nommé <user> et n'est pas éditable ; il est réservé à fcron.

L'éditeur utilisé pour modifier la fcrontab peut être modifié par la commande :

sudo update-alternatives --config editor

ou, provisoirement, en modifiant la variable d'environnement VISUAL, par exemple :

export VISUAL="gedit"

L'éditeur par défaut est nano. Pendant l'édition avec fcrontab, nano utilise un fichier temporaire de la forme /tmp/wxyz1234. Il est inutile de se préoccuper de ce fichier temporaire et on peut sauver les modifications sous ce nom, lorsqu'on quitte fcrontab, celui-ci génère bien les fichiers comme indiqué ci-dessus suivant /etc/fcron.conf .

La syntaxe de fcrontab définit 3 types de ligne d'exécution. Chacune correspond à une manière de décrire une tâche à exécuter. Il y a ainsi les &-lignes, les %-lignes et les @-lignes.

&-lignes

Les &-lignes sont les entrées basées sur une date et une heure (c'est le mode "Cron" de FCron), leur syntaxe est de la forme :

&options min hrs jour-du-mois mois jour-de-la-semaine commande

Les valeurs permises pour les différents champs "min", "hrs", etc. sont :

Champ Valeurs permises
minutes 0-59
heures 0-23
jour du mois 1-31
mois 1-12 (ou leurs noms)
jours de la semaine 0-7 (ou leurs noms)

A noter que pour les jours de la semaine 0 et 7 signifient tous les deux le dimanche.

Un champ est toujours renseigné soit par un astérisque « * », qui signifie un intervalle comme « premier-dernier, soit un nombre seul, soit une liste.

Si vous mettez un astérisque « * » dans un champ. Il agira comme « premier-dernier ». Par exemple, un « * » dans le champ minutes signifie toutes les minutes de la minute 0 à la minute 59.

Les listes sont des nombres ou des intervalles séparés par des virgules « , ». Par exemple : « 2,5,15,23 ».

Les intervalles de nombres sont de la forme « début-fin », où « début » et « fin » sont inclus. Par exemple, « 3-5 » signifie les valeurs 3, 4 et 5. Vous pouvez également ajouter un « /nombre » optionnel à l'intervalle, où le nombre signifie le pas dans l'intervalle. Par exemple, « 0-23/2 » peut être utilisé dans le champ heure pour spécifier l'exécution d'une commande toutes les heures paires. Enfin, un ou plusieurs « ~nombre » peuvent être ajoutés afin de désactiver certaines valeurs dans l'intervalle. Par exemple, « 5-8~6~7 » est équivalent à « 5,8 ».

Des intervalles peuvent être inclus dans une liste comme un simple nombre. Par exemple : « 2,5-10/2~6,15,20-25,30 ».

Les noms en anglais peuvent être utilisés pour les champs « mois » et « jour de la semaine ». Pour ce faire, utilisez les trois premières lettres du jour ou du mois concerné (la casse n'a pas d'importance). Veuillez noter que les noms sont utilisés exactement comme les nombres : vous pouvez les utiliser dans une liste ou un intervalle.

Exemple

# lancer macommande tous les jours à 12:05, 12:35, 13:05, 13:35, 14:05 *et* 14:35
& 05,35 12-14 * * * macommande -u moi -o fichier

# récupérer les courriels toutes les heures aux minutes 20, 21, 22, et 24.
20-24~23 * * * * getmail 

# sauvegarder mon travail de la journée toutes les nuits à 03:45 avec une faible priorité, sauf le dimanche, envoyer la sortie par courriel à jim et lancer cette tâche au démarrage si la machine était éteinte à 03:45
&nice(10),mailto(jim),bootrun 45 03 * * *~0 "save --mon travail"

%-lignes

Les %-lignes sont les entrées lancées périodiquement (c'est le mode "Anacron" de FCron), leur syntaxe est de la forme :

%motclef,options commande

Les mots clefs sont hourly, daily, monthly, weekly, midhourly, middaily, nightly, midmonthly, midweekly, mins, hours, days, mons et dow.

Ces mots-clefs indiquent à fcron de lancer la commande une fois entre le début et la fin de l'intervalle de temps correspondant. Un intervalle de temps est, par exemple, le temps compris entre lundi 16:20 et mercredi 01:43. Par exemple, le mot-clef weekly indique à fcron de lancer une commande une fois par semaine entre le lundi et le dimanche.

Il y a cependant une exception concernant les mots clefs mins, hours, days, mons et dow. Ceux-ci lancent une commande une fois durant CHAQUE intervalle de temps spécifié.

Avec ces mots-clefs, l'utilisateur doit préciser quand la commande devrait être lancée dans chaque intervalle de temps :

Mots-clefs doit être suivi par les champs
hourly, midhourly minutes
daily, middaily, nightly, weekly, midweekly minutes et heures
monthly, midmonthly minutes, heures et jours

Exemples

%nightly * 21-23,3-5 echo "une entrée nigthly"

lancera la commande une fois par nuit soit entre 21:00 et 23:59, soit entre 3:00 et 5:59 (elle sera exécutée aussitôt que possible ; pour modifier ce comportement, utilisez l'option random).

%mins 15 2-4 * * * echo

lancera echo tous les jours à 2:15, 3:15 ET 4:15.

%hours 15 2-4 * * * echo

lancera echo seulement une fois soit à 2:15, soit à 3:15 OU BIEN à 4:15.

@-lignes

Les @-lignes sont les entrées basées sur le temps écoulé depuis le démarrage du système, leur syntaxe est de la forme :

@options fréquence commande

où fréquence est une valeur de temps de la forme valeur*multiplicateur+valeur*multiplicateur+…+valeur-en-minutes comme « 12h02 » ou « 3w2d5h1 ». La première signifie « 12 heures et 2 minutes d'exécution de fcron » tandis que la seconde signifie « 3 semaines, 2 jours, 5 heures et 1 minute d'exécution de fcron ». Les multiplicateurs valides sont :

Signification Multiplicateurs
mois m
semaines w
jours d
heures h
secondes s

Exemple

# Récupérer vos courriels toutes les 30 minutes
@ 30 getmails -all

# Effectuer quelques tests de sécurité toutes les 48 heures de fonctionnement
# du système, envoyer un courriel au super-utilisateur même s'il n'a pas de sortie
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh

Ce type d'entrée ne garantit pas une date et heure d'exécution (vu que la tâche est retardée à chaque démarrage du système par le temps écoulé depuis l'arrêt du système), mais peut être pratique pour des tâches dépendant du nombre de choses faites par les utilisateurs (par exemple, il vaudrait mieux vérifier le système de fichiers après un certain nombre d'utilisation par les utilisateurs plutôt que tous les x jours, vu que le système peut être lancé de 1 jour à x jours pendant cet intervalle de x jours).

Si votre commande doit être lancée graphiquement, il est nécessaire de la précéder de "DISPLAY=:0.0"

Les commandes ci-dessus sont stockées dans un fichier fcrontab appartenant à votre compte d'utilisateur et exécutées avec votre niveau des permissions. Si vous voulez exécuter, régulièrement, une commande exigeant un plus haut niveau de permission (root), vous devez utiliser le fichier fcrontab root (ou racine) :

sudo fcrontab -e

Remarque : cette commande édite directement le fichier /var/spool/fcron/<utilisateur> (avec ici root comme utilisateur).

Selon les commandes à exécuter, vous devrez changer la variable PATH des utilisateurs ayant les droits root en mettant la ligne suivante au dessus de leurs fichiers fcrontab :

PATH=/usr/sbin:/usr/bin:/sbin:/bin

Il est important de vérifier que vos travaux dans fcron fonctionnent comme prévu. Une méthode pour faire un test est de paramétrer le travail dans la fcrontab pour qu'il se fasse quelques minutes plus tard et de vérifier les résultats avant de mettre, la synchronisation de cette tâche, à la bonne heure. Vous pouvez également trouver utile de mettre les résultats des commandes dans un fichier texte qui notent les succès ou les échecs, par exemple :

echo "Sauvegarde de nuit: $(date)" >>/tmp/mybackup.log

Pour plus d'information, regardez les pages du man pour fcron et fcrontab (le man est détaillé sur les commandes basiques).

Cet article reprend en partie L'article fcron de Wikipedia et l'article cron de cette documentation.

  • cron : planifier/programmer des tâches
  • Anacron : planificateur de commande « anachronique »
  • incron : effectuer une action, commande(s), scripts, etc, en cas de modifications de fichiers ou de répertoires donnés

Contributeurs : Tartopom Le 10/04/2007, à 23:15, Chamblard Le 10/12/2015

  • fcron.txt
  • Dernière modification: Le 11/09/2022, 11:06
  • par moths-art