Copyright © 2000-2021 Thibault Godouet | Fcron 3.3.1 (dev release) | Web page : http://fcron.free.fr

Documentation de fcron
Prev |  | Next

# fcrontab

## Name

fcrontab -- Tables de configuration de fcron

## Description

Un fichier fcrontab est un fichier qui contient toutes les tables utilisées par le démon fcron(8). Cela permet à un utilisateur de dire au démon : « Exécute cette tâche à tel moment ». Chaque utilisateur a sa propre table fcrontab, et les commandes contenues dans une table seront exécutées sous l'identifiant du propriétaire de la table. Seul le super-utilisateur peut lancer une tâche avec les droits d'un autre utilisateur en utilisant l'option `runas` (voir plus loin).

Les lignes blanches, les lignes débutant par le symbole dièse « # » (qui sont considérées comme étant des commentaires), les espaces ou les tabulations placées en début de ligne sont ignorées. Chaque ligne d'un fichier fcrontab peut être soit :

- une configuration d'environnement,

- une configuration d'option,

- des entrées basées sur la durée totale de fonctionnement du système depuis la dernière exécution de la tâche,

- des entrées basées sur un temps absolu (comme les entrées normales de crontab), ou

- des entrées lancées périodiquement.

Toute ligne logique (une entrée ou une affectation) peut être scindée en plusieurs lignes effectives (des lignes finissant par un caractère fin de ligne) en plaçant une barre oblique inverse « \ » avant le caractère fin de ligne « \n ».

### La configuration de l'environnement

La configuration de l'environnement est de la forme

> nom = valeur

où les espaces autour du signe d'égalité « = » sont ignorées et optionnelles. Les espaces en fin de ligne sont également ignorées, mais vous pouvez placer la valeur entre guillemets (simple ou double, mais appareillés) pour préserver les caractères blancs dans la valeur.

Lorsque fcron exécute une commande, il positionne toujours les variables d'environnement `USER`, `HOME`, et `SHELL` comme elles sont définies dans `/etc/passwd` pour le propriétaire de la table fcrontab dont la commande est issue. Les variables d'environnement `HOME` et `SHELL` peuvent être écrasées par la configuration contenue dans le fichier fcrontab, mais `USER` ne peut pas l'être. Toute autre affectation d'environnement définie dans le fcrontab de l'utilisateur est effectuée et la commande exécutée.

De plus, la variable spéciale `MAILTO` vous permet d'indiquer à fcron à qui envoyer par courriel la sortie de la commande. Veuillez noter que `MAILTO` est en fait équivalente à la déclaration globale de l'option `mailto` (voir plus loin). Elle n'est utilisée que pour assurer une rétrocompatibilité, aussi, vous devriez plutôt utiliser directement l'option `mailto`.

### EntrÉes basÉes sur le temps ÉcoulÉ depuis le démarrage du systÈme

Les entrées des commandes qui doivent être exécutées une fois toutes les m minutes de l'exécution de fcron (qui sont normalement les mêmes m minutes de l'exécution du système) sont 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\ » tant dis que la seconde signifie «\ 3 semaines, 2 jours, 5 heures et 1 minute d'exécution de fcron\ ». Les multiplicateurs valides sont :

Table 2-1. Multiplicateurs de temps valides

signification : | multiplicateurs :
--- | ---
mois (4 semaines) : | m
semaines (7 jours) : | w
jours (24 heures) : | d
heures (60 minutes) : | h
secondes : | s

À la place de `options`, l'utilisateur peut mettre une valeur de temps qui sera interprétée comme @first(`temps`). Si l'option `first` n'est pas positionnée, la valeur de « `fréquence` » est utilisée.

Ce type d'entrée ne garantie 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).

Le temps restant avant la prochaine exécution est sauvegardé toutes les 1800 secondes (afin de limiter les dommages provoqués par un plantage) et lorsque fcron quitte après avoir reçu un signal `SIGTERM`, c.-à-d. lorsque l'on arrête le système. Ainsi, ce type d'entrée est particulièrement utile pour des systèmes qui ne tournent pas de manière régulière. La syntaxe étant très simple, il est également pratique pour des tâches qui n'ont pas besoin d'être exécutées à une date et une heure spécifique.

Voir aussi : les options `first`, `mail`, `nolog`, `serial`, `lavg`, `nice`, `runas` (voir plus loin).

Example 2-1. Quelques exemples de lignes basÉes sur le temps ÉcoulÉ depuis le dÉmarrage du systÈme

    # 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

### EntrÉes basÉes sur une date et une heure

Le deuxième type d'entrée d'un fichier fcrontab commence par un caractère « & » optionnel qui peut être immédiatement suivi par un nombre optionnel définissant la fréquence d'exécution (ceci est équivalent à l'option `runfreq`) ou par une déclaration d'options ; il possède cinq champs de date et d'heure, ainsi qu'une commande shell :

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

Veuillez noter que la commande shell peut être précédée par un nom d'utilisateur, ce qui est équivalent à runas (`user`) : vu que cela n'existe que pour une retrocompatibilité, vous devriez plutôt utiliser l'option `runas` (voir plus loin). La fréquence est interprétée de la façon suivante : « lancer cette commande après x correspondances des champs date et heure ». Les champs date et heure sont :

Table 2-2. Champs date et heure

champ : | valeurs permises :
--- | ---
minute : | 0-59
heure : | 0-23
jour du mois : | 1-31
mois : | 1-12 (ou leurs noms, voir plus loin)
jour de la semaine : | 0-7 (0 et 7 signifient tous deux le dimanche, ou leurs noms)

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

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 ». La forme finale d'un champ est :

> a[-b[/c][~d][~e][...]][,f[-g[/h][~i][~j][...]]][,...]

où les lettres sont des nombres entiers.

Vous pouvez également utiliser unE astérisque « * » dans un champ. Il agira comme « premier-dernier ». Par exemple, un « * » dans le champ minute signifie toutes les minutes de la minute 0 à la minute 59.

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 (Ndt : 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.

Si un jour de mois et un jour de semaine sont donnés, la commande sera exécutée seulement si les deux correspondent au jour et à l'heure actuels à moins que l'option `dayor` n'ait été positionnée. Par exemple, avec la ligne

    5 10 31 * 7 echo ''

echo sera exécutée seulement les jours qui sont un dimanche ET le 31ème jour du mois, à 10:05.

Voir aussi : options `dayor`, `bootrun`, `runfreq`, `mail`, `nolog`, `serial`, `lavg`, `nice`, `runas` (voir plus loin).

Example 2-2. Quelques exemples d'entrÉes basÉes sur une date et une heure

    # 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"

### EntrÉes lancÉes pÉriodiquement

Le troisième type d'entrée fcrontab commence par le caractère « % », suivi par un mot-clef pris parmi une des trois différentes listes, puis par des options.

#### Mots-clefs *ly

Ces mots-clefs sont :

`hourly` , `daily` , `monthly` , `weekly`

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.

Avec ces deux sortes de mots-clefs, l'utilisateur doit renseigner les champs heure nécessaires (comme ils sont définis dans « Entrées basées sur une date et une heure » (voir plus haut)) pour préciser quand la commande devrait être lancée dans chaque intervalle de temps :

Table 2-3. Champs de temps nÉcessaires À chaque mot-clef

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.

#### Mots-clefs mid*ly

Ils sont similaires aux mots-clefs « *ly » :

`midhourly` , `middaily` , `nightly` , `midmonthly` , `midweekly`

Ils fonctionnent exactement comme les mots-clefs « *ly », excepté que les intervalles de temps sont définis du milieu au milieu de l'intervalle « *ly » correspondant : `midweekly` lancera une commande une fois entre le jeudi et le mercredi. Veuillez noter que `nightly` est équivalent à `middaily`.

Par exemple :

    %nightly,mail(no) * 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`) et ne pas envoyer de courriel (étant donné que l'option `mail` a été définie à « no »).

Voir aussi : options `lavg`, `noticenotrun`, `strict`, `mail`, `nolog`, `serial`, `nice`, `runas`, `random` (voir plus loin).

#### Mots-clefs *s

Ce sont :

`mins` , `hours` , `days` , `mons` , `dow`

Ces mots-clefs agissent différemment, comme suit :

lancer cette commande unE fois durant CHAQUE intervalle de temps spécifié, ignorant les champs suivants le mot-clef dans la définition de l'intervalle de temps (un `hours` empêche le champ `mins` d'être considéré comme un intervalle de temps, mais il sera utilisé pour déterminer quand la ligne devra être lancée au cours de l'intervalle : voir la note plus loin) (`dow` signifie « day of week »).

Un tel mot-clef est suivi par 5 champs de date et d'heure (les mêmes champs utilisés pour une ligne basée sur un temps absolu (voir plus haut). De plus, avec cette sorte de mots-clefs, il doit y avoir sur les lignes des dates et heures qui ne correspondent pas (c.-à-d. que ce qui suit n'est pas permis :

    %hours * 0-23 * * * echo "Ligne INCORRECTE !"

mais ceci l'est :

    %hours * 0-22 * * * echo "Ok."

> Note: un nombre seul dans un champ est considéré comme un intervalle de temps :

>     %mins 15 2-4 * * * echo

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

> Mais tous les champs suivants les mots-clefs sont ignorés dans la définition d'un intervalle de temps :

>     %hours 15 2-4 * * * echo

> lancera echo seulement UNE FOIS soit à 2:15, soit à 3:15 OU BIEN à 4:15.

Voir aussi : option `random` (voir plus loin).

### Options

Les options peuvent être positionnées soit pour chaque ligne située après la déclaration, soit pour une ligne de manière individuelle. Dans le premier cas, la configuration est faite sur une ligne complète après un point d'exclamation « ! », dans le second cas, elle est faite après l'un des symboles suivants « & », « % » ou « @ », suivant le type de planification. Veuillez noter qu'une déclaration d'option dans une planification écrase la déclaration globale de la même option.

Les options sont séparées par des virgules « , » et leurs arguments, s'il y en a, sont placés entre parenthèses « ( » et « ) ». Les espaces ne sont pas permises. Une déclaration d'option est de la forme

> `option`[(`arg1`[,`arg2`][...])][,`option`[(`arg1`[...])]][...]

où `option` est soit le nom complet de l'option, soit son abréviation. Les options sont (avec leur valeur par défaut entre parenthèses) :

Options valides dans un fichier fcrontab

bootrun, b

  booléen(`false`)

  Lancer une ligne « & » au démarrage de fcron si celle-ci avait dû être lancée pendant l'arrêt du système.

dayand

  booléen(`true`)

  Effectuer un ET logique entre le jour de la semaine et le jour du mois.

  Voir aussi : option `dayor`.

dayor

  booléen(`false`)

  Effectuer un OU logique entre le jour de la semaine et le jour du mois.

  Voir aussi : option `dayand`.

erroronlymail

  booléen(`false`)

  Envoyer la sortie par courriel uniquement si la tâche a retourné une valeur de sortie autre que zéro.

  Voir aussi : options `mail`, `mailto`, `nolog`, `forcemail`.

exesev

  booléen(`false`)

  Une tâche peut-elle être exécutée plusieurs fois simultanément ?

  Voir aussi : options `serialonce`, `lavgonce`.

first, f

  time-value

  Temps avant la première exécution d'une tâche basée sur le temps de fonctionnement du système (lignes « @ »). Utile dans les cas suivants : vous avez plusieurs tâches à exécuter, disons, toutes les heures. En positionnant différentes valeurs « first » pour chaque tâche, vous évitez que celles-ci soient lancées simultanément chaque fois. Vous pouvez également la mettre à 0, ce qui est pratique lorsqu'elle est utilisée avec l'option `volatile`.

forcemail

  booléen(`false`)

  Envoyer la sortie par courriel même si celle-ci est vide.

  Voir aussi : options `mail`, `mailto`, `erroronlymail`, `nolog`.

lavg

  réel(`0`) réel(`0`) réel(`0`)

  Définir les valeurs de la charge moyenne du système sur 1, 5 et 15 minutes (dans cet ordre) en dessous desquelles la tâche pourra être lancée. Ces valeurs ne peuvent avoir qu'une seule décimale (c.-à-d. « 2.3 »). S'il y en a plus, la valeur sera arrondie. Mettre une valeur à 0 pour ignorer la charge moyenne correspondante. Si vous mettez toutes les valeurs à 0, la tâche sera lançée sans tenir compte de la charge système.

  Voir aussi : options `lavg1`, `lavg5`, `lavg15`, `until`, `lavgonce`, `lavgor`, `lavgand`, `strict`, `noticenotrun`.

lavg1, lavg5, lavg15

  réel(`0`)

  Définir le seuil des valeurs de charge moyenne du système sur 1, 5 ou 15 minutes. Définir l'une d'elles à 0 pour ignorer la charge moyenne correspondante.

  Voir aussi : options `lavg`.

lavgand

  booléen(`true`)

  Effectuer un ET logique entre les valeurs de charge moyenne du système à 1, 5 et 15 minutes.

  Voir aussi : options `lavg`, `lavgor`.

lavgonce

  booléen(`1`)

  Une tâche peut-elle être mise plusieurs fois simultanément dans la file d'attente charge moyenne du système (Ndt : lavg queue) ?

  Voir aussi : options `lavg`.

lavgor

  booléen(`false`)

  Effectuer un OU logique entre les valeurs de charge moyenne du système à 1, 5 et 15 minutes.

  Voir aussi : options `lavg`, `lavgand`.

mail, m

  booléen(`true`)

  Envoyer la sortie (s'il y en a) par courriel, ou non.

  Voir aussi : options `mailto`, `forcemail`, `nolog`.

mailto

  email-address(`nom du propriétaire du fichier`)

  Envoyer la sortie (si nécessaire) par courriel à « `email-address` ». Cela peut être soit un nom d'utilisateur, soit une adresse courriel complète. Une `mailto` déclarée mais vide (chaîne "") est équivalente à « mail(false) ».

  Voir aussi : options `mail`, `forcemail`, `nolog`.

nice, n

  nice-value

  Modifier la priorité de la tâche. Une nice-value est un entier compris entre -20 (plus forte priorité) et 19 (plus faible priorité). Seul le super-utilisateur est autorisé à utiliser une valeur négative pour cette option.

nolog

  booléen(`false`)

  Si elle est positionnée à « true », journaliser seulement les erreurs des tâches correspondantes. Peut être utile pour des tâches lancées très fréquemment, et/ou pour réduire les accès disque sur un ordinateur portable.

  Voir aussi : options `mail`, `mailto`, `forcemail`.

noticenotrun

  booléen(`false`)

  fcron devrait-il prévenir l'utilisateur par courriel de la non exécution d'une tâche « % » ou d'une tâche « & » ? (à cause de l'arrêt du système dans les deux cas ou d'une charge moyenne trop élevée dans le second cas).

  Voir aussi : options `lavg`, `strict`.

random

  booléen(`false`)

  Dans une ligne lancée périodiquement, cette option répond à la question : « Cette tâche devrait-elle être lancée aussitôt que possible dans son intervalle de temps d'exécution (plus sûr), ou bien fcron doit-il définir une date et heure aléatoire d'exécution dans ce même intervalle de temps ? ». Veuillez noter que si cette option est positionnée, la tâche peut ne pas être lancée si fcron n'est pas en cours d'exécution durant tout l'intervalle d'exécution. En outre, sachez qu'il peut être relativement facile pour une personne compétente de deviner l'heure de la prochaine exécution d'une tâche utilisant l'option random : il est donc préférable de ne pas baser la sécurité de quelque chose de sensible sur l'aléa de cette option. Cependant, cela ne devrait pas poser de problème pour la plupart de ses utilisations.

reset

  booléen

  Positionner toutes les options à leur valeur par défaut.

runas

  utilisateur

  Lancer avec les permissions et l'environnement de « `utilisateur` » (seul le super-utilisateur est autorisé à utiliser cette option).

runfreq, r

  entier

  Lancer toutes les « `runfreq` » correspondances de date et d'heure. (Cette option est ignorée dans le cas d'entrées basées sur le temps écoulé depuis le démarrage du système).

serial, s

  booléen(`false`)

  Fcron fait tourner au plus 1 tâche(s) séquentielle(s) en même temps (c.-à-d. pour lesquelles l'option serial est définie), et autant de tâches qui sont à la fois séquentielles et dont l'exécution dépend aussi de la charge système (autrement dit pour lesquelles les options serial et lavg sont définies). Cette valeur peut être modifiée grâce à l'option `-m` de fcron. Cette option trouve toute son utilité dans le cas de tâches lourdes afin d'éviter une surcharge du système.

  Voir aussi : options `serialonce`, `lavg`.

serialonce

  booléen(`0`)

  Une tâche peut-elle être mise plusieurs fois simultanément dans la file d'attente séquentielle ? (Ndt : serial queue)

  Voir aussi : options `exesev`, `lavgonce`.

stdout

  booléen(`false`)

  Si fcron s'exécute en arrière plan, permettre la sortie des tâches sur stderr/stdout plutôt que par courriel ou que l'ignorer.

  Voir aussi : option `--once` de fcron(8).

strict

  booléen(`true`)

  Lorsqu'une tâche « % » de la file d'attente charge moyenne du système (Ndt : lavg queue) est à la fin de l'intervalle de temps d'exécution, doit-elle être retirée de la file d'attente (strict(true), ainsi la tâche ne sera pas exécutée), ou bien doit-elle y rester jusqu'à ce que la charge moyenne du système permette son exécution (strict(false)) ?

  Voir aussi : options `lavg`, `noticenotrun`.

timezone

  timezone-name(`fuseau horaire du système`)

  Lancer la tâche dans le fuseau horaire fourni. timezone-name est une chaîne qui doit être valide du point de vue de la variable d'environnement TZ : consultez la documentation de votre système pour plus de détails. Par exemple, « Europe/Paris » est valide sur un système Linux. Cette option gère correctement le changement d'heure.

  Veuillez noter que si vous fournissez un argument timezone-name erroné, celui-ci sera SILENCIEUSEMENT ignoré, et la tâche sera exécutée dans le fuseau horaire du système.

  ATTENTION : N'utilisez PAS simultanément les options timezone et tzdiff ! Cela n'a pas de raison d'être, et timezone est plus maligne que tzdiff.

  Voir aussi : option `tzdiff`.

tzdiff

  entier(`0`)

  ATTENTION : cette option est obsolète : utilisez plutôt l'option timezone !

  Différence de fuseau horaire (en heures, valeur comprise entre -24 et 24) entre l'heure du système et l'heure locale réelle. Cette option permet à l'utilisateur de définir ses lignes « & » et « % » en temps local. Veuillez noter que cette valeur est définie pour l'ensemble du fichier fcrontab, et que seule la dernière déclaration est prise en compte. tzdiff est quelque peu stupide : elle ne gère pas le changement d'heure alors que l'option timezone le fait, aussi, vous devriez utiliser cette dernière.

  Voir aussi : option `timezone`.

until

  time-value(`0`)

  Définir le délai d'attente maximal pour les valeurs de charge système. Si le délai est dépassé, la tâche sera lancée indépendemment de la charge système. Définir until à 0 pour désactiver le délai d'attente.

  Voir aussi : option `lavg`.

volatile

  booléen(`false`)

  Quand cette option est activée, la tâche est basée sur un temps « volatile », qu'on pourrait aussi qualifier de « non persistant ». Plus précisément, fcron ne « retient » pas le temps écoulé depuis la dernière exécution des tâches « volatiles » entre deux démarrages de fcron, et agit comme si les lignes avaient été fraîchement ajoutées à chaque démarrage de fcron. Ainsi, l'option `first` s'appliquera par exemple pour les lignes « volatiles » à chaque démarrage de fcron. Cette option est en particulier utile lorsque fcron est lancé à partir d'un script qui tourne, par exemple, seulement pendant une connexion à Internet non permanente : l'exécution des tâches « volatiles » est alors basée sur le temps depuis le début de la connexion et le lancement de fcron plutôt que sur le temps absolu. Enfin, veuillez noter que cette option s'associe bien à l'option `first`.

  Voir aussi : options `first`, `stdout`, Entrées basées sur le temps écoulé depuis le démarrage du système, l'option `--once` de fcron dans fcron(8).

Un argument de type booléen peut ne pas être indiqué, auquel cas les parenthèses ne seront pas utilisées et il sera interprété comme étant `true` ; les chaînes « true », « yes » ou « 1 » signifient `true` ; et les chaînes « false », « no » ou « 0 » signifient `false`. Voir plus haut les explications sur les valeurs de temps (section « Entrées basées sur le temps écoulé depuis le démarrage du système »).

Veuillez noter que `dayand` et `dayor` sont, en fait, la même option : une valeur « false » pour `dayand` est équivalente à une valeur « true » pour `dayor` et réciproquement, une valeur « false » pour `dayor` est équivalente à une valeur « true » pour `dayand`. C'est également le cas pour les options `lavgand` et `lavgor`.

Veuillez noter un cas particulier à gérer : une tâche aurait due être placée dans la file d'attente séquentielle, *mais* la précédente entrée de cette tâche n'est pas encore achevée à cause d'une forte charge système ou d'un quelconque événement extérieur. L'option `serialonce` répond à cette question : « La nouvelle entrée de cette tâche doit-elle être ignorée ? ». De cette façon, on peut distinguer d'une part les tâches sans contrainte forte sur l'heure d'exécution qui doivent être exécutées un nombre de fois bien défini (serial(yes), serialonce(false)), et d'autre part les tâches toujours sans contrainte forte sur l'heure d'exécution mais dont le nombre d'exécutions n'est pas important ou qu'il est inutile de lancer deux fois d'affilée (serial(true), serialonce(true)), qu'on ne rentrera donc pas une deuxième fois dans la file séquentielle de façon à éviter de charger le système inutilement. Par exemple, « Payer ses employés » est une tâche qui doit être exécutée exactement une fois par mois (serialonce(false)), alors que « faire le ménage » doit être exécutée de préférence une fois par semaine, mais il est inutile de le faire deux fois d'affilée si par hasard on avait pris du retard (serialonce(true)).

Les mêmes considérations s'appliquent pour la file d'attente charge système et peuvent être exprimées par l'option `lavgonce`.

De plus, si les files d'attente séquentielle et charge système contiennent respectivement plus de 30 et 30 tâches, toute nouvelle tâche sera rejetée (et donc non exécutée) pour éviter une saturation de ressources système. Dans ce cas, un message d'erreur sera journalisé à travers syslog.

Enfin, s'il reste des tâches dans les files d'attente séquentielle et charge système au moment de l'arrêt de fcron, celles-ci seront déposées une fois dans leur file correspondante au redémarrage (l'ordre peut ne pas être conservé).

Example 2-3. Exemple de dÉclaration d'option :

    !reset,serial(true),dayor,bootrun(0),mailto(root),lavg(.5,2,1.5)

## Exemples

Example 2-4. Exemple d'un fichier fcrontab utilisateur

    # utiliser /bin/bash pour lancer les commandes, quoique puisse indiquer /etc/passwd
    SHELL=/bin/bash

    # envoyer la sortie par courriel à l'utilisateur thib,
    # quelque soit le propriétaire de ce fcrontab.
    !mailto(thib)

    # définir une variable équivalente à " Salut thib et paul ! "
    # les caractères « nouvelle ligne » sont échappés avec
    # une barre oblique inverse « \ » et les guillemets servent
    # à conserver les espaces de début et de fin de chaîne
    TEXT= " Salut\
     thib et\
     paul ! "

    # on veut utiliser la file d'attente séquentielle mais pas l'option bootrun
    !serial(true),b(0)

    # lancer la première fois après 5 minutes de fonctionnement du système,
    # puis toutes les heures par la suite
    @first(5) 1h   echo "Lancer toutes les heures"

    # lancer tous les jours
    @ 1d echo "fcron quotidien"

    # lancer une fois dans la matinée et une fois dans l'après-midi si le système
    # est en fonctionnement à n'importe quel moment pendant ces intervalles de temps
    %hours * 8-12,14-18 * * * echo "Hé patron, je bosse aujourd'hui !"

    # lancer une fois par semaine à l'heure du déjeuner
    %weekly * 12-13 echo "J'ai laissé allumé mon système au moins une fois\
     à l'heure du déjeuner cette semaine."

    # lancer tous les samedi et dimanche à 9:05
    5 9 * * sat,sun echo "Bonjour Thibault !"

    # lancer tous les jours pairs du mois de mars à 18:00, sauf le 16
    0 18 2-30/2~16 Mar * echo "Il est temps de se rentrer à la maison !"

    # la ligne précédente est équivalente à
    & 0 18 2-30/2~16 Mar * echo "Il est temps de se rentrer à la maison !"

    # mettre toutes les options à leur valeur par défaut et définir runfreq
    # pour les lignes qui vont suivre
    !reset,runfreq(7)

    # lancer une fois toutes les 7 correspondances (grâce à la déclaration précédente),
    # ainsi, si le système est en fonctionnement tous les jours à 10 heures,
    # la commande sera lancée une fois par semaine
    & 0 10 * * * echo "Si vous avez vu ce message pour la dernière fois il y a 7 jours,\
     c'est que cette machine a fonctionné tous les jours à 10 heures durant la dernière semaine.\
     Si vous avez eu ce message il y a 8 jours, c'est que cette machine n'a pas fonctionné\
     un jour à 10:00 heures depuis le dernier message, etc."

    # attendre toutes les heures que la charge système moyenne sur 5 minutes
    # soit inférieure à 0.9
    @lavg5(0.9) 1h echo "La charge moyenne système est faible"

    # attendre au maximum 5 heures chaque jour une baisse de la charge système
    @lavgand,lavg(1,2.0,3.0),until(5h) 1d echo "La charge système vient de diminuer"

    # attendre le meilleur moment pour lancer une tâche lourde
    @lavgor,lavg(0.8,1.2,1.5),nice(10) 1w echo "C'est une très lourde tâche"

    # lancer une fois toutes les nuits soit entre 21:00 et 23:00,
    # soit entre 3:00 et 6:00
    %nightly,lavg(1.5,2,2) * 21-23,3-6 echo "Il est temps de récupérer\
     la dernière version de Mozilla !"

## Fichiers

`/usr/local/etc/fcron.conf`

  Fichier de configuration de fcron, fcrontab et fcrondyn : contient les chemins (répertoire spool, fichier pid) et les programmes par défaut à utiliser (éditeur, shell, etc.). Voir fcron.conf(5) pour plus de détails.

`/usr/local/etc/fcron.allow`

  Utilisateurs autorisés à utiliser fcrontab et fcrondyn (un seul nom par ligne, le nom spécial « all » signifiant tout le monde).

`/usr/local/etc/fcron.deny`

  Utilisateurs qui ne sont pas autorisés à utiliser fcrontab et fcrondyn (même format que le fichier précédent).

`/usr/local/etc/pam.d/fcron` (ou `/usr/local/etc/pam.conf`)

  Fichier de configuration PAM pour fcron. Voir pam(8) pour plus de détails.

## Voir aussi

fcrontab(1),
fcrondyn(1),
fcrontab(5),
fcron.conf(5),
fcron(8).
Si vous êtes en train d'apprendre à utiliser fcron, je vous suggère plutôt de lire la version HTML de la documentation (si ce n'est pas déjà ce que vous faites en ce moment ! :) ) : le contenu est le même, mais il est plus aisé de naviguer grâce aux hyperliens.

## Auteur

Thibault Godouet `<fcron@free.fr>`

## Traduction

Ce document est une traduction réalisée par Alain Portal <aportal AT univ-montp2 DOT fr> le 6 février 2006.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=en man 5 fcrontab ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.

Prev | Home | Next
fcrontab | Up | fcrondyn