\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{sam. mai 22 21:38:41 CEST 2010}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={fcrontab},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Installer-gérer les tables fcron},
CreationDate={D:20100522213841},
ModDate={D:20100522213841},
Keywords={Linux}
}}
\begin{document}
 
\begin{center}
{\Huge fcrontab }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Installer-gérer les tables fcron}
 
\vspace{10mm}
 
\hspace{1mm}  fcrontab est le programme utilisé pour installer, éditer, lister et supprimer les tables utilisées par fcron. Comme fcron utilise en interne un format non lisible, l'utilisateur ne peut pas éditer directement son fcrontab. Un utilisateur peut installer un fcrontab s'il est listé dans \textbf{/etc/fcron.allow} et pas dans \textbf{/etc/fcron.deny}.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge OPTIONS }
 
\
 
\begin{description} \normalsize
\item[\hspace{1mm} -u]{Spécifier l'utilisateur. ne devrait être utilisé que par root.}
\item[\hspace{1mm} -l]{Liste le fcrontab de l'utilisateur courant}
\item[\hspace{1mm} -e ]{Éditer le fcrontab de l'utilisateur courant.}
\item[\hspace{1mm} -r]{Supprimer le fcrontab de l'utilisateur courant.}
\item[\hspace{1mm} -z]{Réinstaller le fcrontab de l'utilisateur courant.}
\item[\hspace{1mm} -n ]{Ignore la version précédente de fcrontab.}
\item[\hspace{1mm} -c]{Spécifie le fichier de configuration}
\item[\hspace{1mm} -d]{Mode debuggage}
\end{description}
 
\hspace{1mm}  Chaque ligne dans un fichier crontab peut être:
\vspace{5mm} \\
 
 
\begin{description} \normalsize
\item[\hspace{1mm} -]{une configuration d'environnement}
\item[\hspace{1mm} -]{une configuration d'options}
\item[\hspace{1mm} -]{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}
\item[\hspace{1mm} -]{des entrées basées sur un temps absolu (comme les entrées normales de crontab)}
\item[\hspace{1mm} -]{des entrées lancées périodiquement}
\end{description}
 
\vspace{1cm}{\huge Configuration de l'environnement }
 
\
 
\hspace{1mm}  ils sont sous la forme: \textbf{name = value}. Quand fcron exécute une commande, il définit toujours \textbf{USER}, \textbf{HOME} et \textbf{SHELL} comme définit dans \textbf{/etc/passwd}. \textbf{HOME} et \textbf{SHELL} peuvent être remplacés par un paramètre dans fcrontab, mais pas \textbf{USER}. La variable \textbf{MAILTO} permet de spécifier à qui mailer les sorties.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Entrées basées sur le temps écoulé depuis le démarrage du système }
 
\
 
\hspace{1mm} Les entrées des commandes qui ont été lancées une fois toutes les n minutes sont sous la forme: \\
\hspace{1mm} \textbf{@options fréquence commande} \\
\hspace{1mm} où la fréquence est une valeur de temps sous la forme: \\
\hspace{1mm} \textbf{valeur+multiplieur[+valeur+multiplier[...]+valeur\_en\_minutes]} \\
\hspace{1mm} exemple: \\
\hspace{1mm} \textbf{"12h02", "3w2d5h1"} \\
\hspace{1mm} il s'gait du temps d'exécution de fcron. les multiplieurs valides sont: \\
\hspace{1mm} \textbf{mois(m), semaine(w), jours(d), heure(h) et seconde(s)} \\
 
\hspace{1mm}  \textbf{options} sert à placer une valeur de temps: il sera interprété comme \textbf{@first(<time>)}. Si \textbf{option} n'est pas spécifé, \textbf{frequence} est utilisé.
\vspace{5mm} \\
 
 
\hspace{1mm}  Ce type d'entrée ne garantie pas de date et heure d'exécution (vu que la tâche est retardé à chaque démarrage par le temps passé depuis l'arrêt), mais peut être pratique pour des tâches dépendant du nombre de choses faites par les utilisateurs.
\vspace{5mm} \\
\hspace{1mm}  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.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} récupérer vos mails toutes les 30 minutes: \\
\hspace{1mm} \textbf{@ 30 getmails -all} \\
\hspace{1mm} Effectuer quelques tests de sécurité toutes les 48 heures de fonctionnement du système, envoyer un mail au super-utilisateur \\
\hspace{1mm} \textbf{@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh} \\
 
\vspace{1cm}{\huge Entrées basée sur une date et une heure }
 
\
 
\hspace{1mm}  Le deuxième type d'entrée d'un fichier fcrontab commence par un caractère \textbf{\&} optionnel qui peut être immédiatement suivi par un nombre optionnel définissant la fréquence d'exécution. il possède cinq champs de date et d'heure, ainsi qu'une commande shell:
\vspace{5mm} \\
\hspace{1mm}  \textbf{\&options min hrs jour-du-mois mois jour-de-la-semaine commande}
\vspace{5mm} \\
\hspace{1mm}  Noter que la commande shell peut être précédée par un nom d'utilisateur. La fréquence est interprétée de la façon suivante: lancer cette commande après x correspondances des champs date et heure.
\vspace{5mm} \\
 
 
\hspace{1mm} champ\_\_\_\_\_\_\_\_\_\_\_\_Valeurs permises
 
{\ttfamily
minute\_\_\_\_\_\_\_\_\_\_\_\_\_\_0-59\\ heure\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_0-23\\ jour du mois\_\_\_\_\_\_\_\_1-31\\ mois\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_1-12 (ou leur noms)\\ jour de la semaine\_\_0-7 (ou leur noms)\\
}
\vspace{8mm}
 
\hspace{1mm}  un \textbf{*} signifie toutes les valeur. Les listes sont des valeur séparée par une virgule (1,4,8). Les intervalles sont séparés par un "-" (1-9), le pas est spécifié après un "/" (*/2), pour désactiver certaines valeur les précéder par " " (5-8 6 7)
\vspace{5mm} \\
\hspace{1mm}  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.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Lancer ma\_commande tous les jours à 12:05, 12:35, 13:05, 13:35, 14:05 et 14:35 \\
\hspace{1mm} \textbf{\& 05,35 12-14 * * * macommande -u moi -o fichier} \\
\hspace{1mm} Récupérer les mails toutes les heures aux minutes 20, 21, 22, et 24. \\
\hspace{1mm} \textbf{20-24 23 * * * * getmail} \\
\hspace{1mm} Sauvegarder mon travail de la journée toutes les nuits à 03:45 avec une faible priorité, sauf le dimanche, envoyer la sortie par mail à jim et lancer cette tâche au démarrage si la machine était éteinte à 03:45 \\
\hspace{1mm} \textbf{\&nice(10),mailto(jim),bootrun 45 03 * * * 0 "save —mon travail"} \\
 
\vspace{1cm}{\huge Entrées lancées périodiquement }
 
\
 
\hspace{1mm} Le troisième type d'entrée fcrontab commence par le caractère "\%", suivi par un mot-clef parmi une des trois différentes listes, puis par des options. \\
\hspace{1mm} \textbf{hourly , daily , monthly , weekly} \\
\hspace{1mm} Indique à fcron de lancer la commande une fois entre le début et là fin de l'intervalle de temps correspondant. \\
\hspace{1mm} \textbf{midhourly , middaily , nightly , midmonthly , midweekly} \\
\hspace{1mm} identique aux précédant, excepté que les intervalles de temps sont définis au milieu de l'intervalle. \\
\hspace{1mm} \textbf{exemple:} \\
\hspace{1mm} \%nightly,mail(no) * 21-23,3-5 echo "une entrée nigthly" \\
\hspace{1mm} mins , hours , days , mons , dow \\
\hspace{1mm} \textbf{Lance 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} \\
\hspace{1mm} \textbf{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. exemple:} \\
\hspace{1mm} \%hours * 0-22 * * * echo "Ok." \\
\hspace{1mm} \textbf{note:} \\
\hspace{1mm} \%mins 15 2-4 * * * echo \\
\hspace{1mm} \textbf{lancera echo tous les jours à 2:15, 3:15 ET 4:15.} \\
\hspace{1mm} \%hours 15 2-4 * * * echo \\
\hspace{1mm} \textbf{lancera echo seulement UNE FOIS soit à 2:15, soit à 3:15 OU BIEN à 4:15.} \\
 
\vspace{1cm}{\huge Options }
 
\
 
\hspace{1mm}  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.
\vspace{5mm} \\
 
 
\hspace{1mm}  Les options sont séparées par des virgules "," et leurs arguments, s'il y en a, sont placés entre parenthèses. Les espaces ne sont pas permises. Une déclaration d'option est de la forme:
\vspace{5mm} \\
 
 
\hspace{1mm} \textbf{option[(arg1[,arg2][...])][,option[(arg1[...])]][...]} \\
 
\begin{description} \normalsize
\item[\hspace{1mm} bootrun, b]{Lancer une ligne "\&" au démarrage defcron si celle-ci avait du être lancée pendant l'arrêt du système.}
\item[\hspace{1mm} dayand]{Effectuer un ET logique entre le jour de la semaine et le jour du mois.}
\item[\hspace{1mm} dayor]{Effectuer un OU logique entre le jour de la semaine et le jour du mois.}
\item[\hspace{1mm} exesev]{Définis si une tâche peut être exécutée plusieurs fois simultanément}
\item[\hspace{1mm} first, f]{Temps avant la première exécution d'une tâche basée sur le temps de fonctionnement du système. 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.}
\item[\hspace{1mm} forcemail]{Envoie la sortie par mail même si celle-ci est vide.}
\item[\hspace{1mm} lavg]{Définit les valeurs de la charge moyenne du système sur 1,5 et 15 minute (dans cet ordre) en dessous desquelles la tâche pourra être lancée. Ces valeurs ne peuvent avoir qu'une seule décimal. Mettre une valeur à 0 pour ignorer la charge moyenne correspondante.}
\item[\hspace{1mm} lavg1, lavg5, lavg15]{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.}
\item[\hspace{1mm} lavgand]{Effectuer un ET logique entre les valeurs de charge moyenne du système 1, 5 et 15 minutes.}
\item[\hspace{1mm} lavgonce]{Une tâche peut-elle être mise plusieurs fois simultanément dans la file d'attente de charge moyenne du système.}
\item[\hspace{1mm} lavgor]{Effectuer un OU logique entre les valeurs de charge moyenne du système à 1, 5 et 15 minutes.}
\item[\hspace{1mm} mail, m]{Envoyer la sortie par mail}
\item[\hspace{1mm} mailto]{Spécifier l'adresse mail.}
\item[\hspace{1mm} nice,n]{Modifier la priorité de la tâche}
\item[\hspace{1mm} nolog]{Journaliser seulement les erreurs des tâches correspondantes}
\item[\hspace{1mm} noticenotrun]{fcron devrait-il prévenir l'utilisateur par mail 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).}
\item[\hspace{1mm} random]{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.}
\item[\hspace{1mm} reset]{Positionner toutes les options à leur valeurs par défaut}
\item[\hspace{1mm} runas]{Lancer avec les permissions et l'environnement de l'utilisateur spécifié (seul root peut utiliser cette option)}
\item[\hspace{1mm} runfreq, r]{Lancer toutes le "runfreq" correspondances de date et d'heure. (cette options est ignorée dans le cas d'entrées basées sur le temps écoulé depuis le démarrage du système).}
\item[\hspace{1mm} serial, s]{fcron fait tourner au plus 1 tâche séquentielle 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.}
\item[\hspace{1mm} serialonce]{Définit si un tâche peut être mise plusieurs fois dans la file d'attente séquentielle.}
\item[\hspace{1mm} stdout]{Si fcron s'exécute en arrière plan, permet la sortie sur stderr/stdout plutôt que par mail.}
\item[\hspace{1mm} strict]{Lorsqu'une tâche \% de la file d'attente de charge moyenne du système 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)) ?}
\item[\hspace{1mm} timezone]{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}
\item[\hspace{1mm} until]{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.}
\item[\hspace{1mm} volatile]{Activé, 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. 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.}
\end{description}
 
\vspace{1cm}{\huge Exemple de fichier fcrontab }
 
\
 
\hspace{1mm} Utiliser /bin/bash \\
\hspace{1mm} \textbf{SHELL=/bin/bash} \\
\hspace{1mm} Envoyer la sortie par mail à l'utilisateur thib, quelque soit le propriétaire de ce fcrontab. \\
\hspace{1mm} \textbf{!mailto(thib)} \\
\hspace{1mm} Définir une variable équivalente à "Salut thib et paul !" les caractères newline sont échappés avec une barre oblique inverse "\textbackslash{}" et les guillemets servent à conserver les espaces de début et de fin de chaîne \\
\hspace{1mm} \textbf{TEXT= " Salut\textbackslash{}} \\
\hspace{1mm} \textbf{thib et\textbackslash{}} \\
\hspace{1mm} \textbf{paul ! "} \\
\hspace{1mm} On veut utiliser la file d'attente séquentielle mais pas l'option bootrun \\
\hspace{1mm} \textbf{!serial(true),b(0)} \\
\hspace{1mm} Lancer la première fois après 5 minutes de fonctionnement du système, puis toutes les heures par la suite \\
\hspace{1mm} \textbf{@first(5) 1h echo "Lancer toutes les heures"} \\
\hspace{1mm} Lancer tous les jours \\
\hspace{1mm} \textbf{@ 1d echo "fcron quotidien"} \\
\hspace{1mm} 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 \\
\hspace{1mm} \textbf{\%hours * 8-12,14-18 * * * echo "Hé patron, je bosse aujourd'hui !"} \\
\hspace{1mm} Lancer une fois par semaine à l'heure du déjeuner \\
\hspace{1mm} \textbf{\%weekly * 12-13 echo "J'ai laissé allumé mon système au moins une fois\textbackslash{}} \\
\hspace{1mm} \textbf{à l'heure du déjeuner cette semaine."} \\
\hspace{1mm} Lancer tous les samedi et dimanche à 9:05 \\
\hspace{1mm} \textbf{5 9 * * sat,sun echo "Bonjour Thibault !"} \\
\hspace{1mm} Lancer tous les jours pairs du mois de mars à 18:00, sauf le 16 \\
\hspace{1mm} \textbf{0 18 2-30/2 16 Mar * echo "Il est temps de se rentrer à la maison !"} \\
\hspace{1mm} La ligne précédente est équivalente à \\
\hspace{1mm} \textbf{\& 0 18 2-30/2 16 Mar * echo "Il est temps de se rentrer à la maison !"} \\
\hspace{1mm} Mettre toutes les options à leur valeur par défaut et définir runfreq pour les lignes qui vont suivre \\
\hspace{1mm} \textbf{!reset,runfreq(7)} \\
\hspace{1mm} 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, \\
\hspace{1mm} \textbf{La commande sera lancée une fois par semaine} \\
\hspace{1mm} \& 0 10 * * * echo "Si vous avez vu ce message pour la dernière fois il y a 7 jours,\textbackslash{} \\
\hspace{1mm} c'est que cette machine a fonctionné tous les jours à 10 heures durant la dernière semaine.\textbackslash{} \\
\hspace{1mm} Si vous avez eu ce message il y a 8 jours, c'est que cette machine n'a pas fonctionné\textbackslash{} \\
\hspace{1mm} un jour à 10:00 heures depuis le dernier message, etc." \\
\hspace{1mm} \textbf{Attendre toutes les heures que la charge système moyenne sur 5 minutes soit inférieure à 0.9} \\
\hspace{1mm} @lavg5(0.9) 1h echo "La charge moyenne système est faible" \\
\hspace{1mm} \textbf{Attendre au maximum 5 heures chaque jour une baisse de la charge système} \\
\hspace{1mm} @lavgand,lavg(1,2.0,3.0),until(5h) 1d echo "La charge système vient de diminuer" \\
\hspace{1mm} \textbf{Attendre le meilleur moment pour lancer une tâche lourde} \\
\hspace{1mm} @lavgor,lavg(0.8,1.2,1.5),nice(10) 1w echo "C'est une très lourde tâche" \\
\hspace{1mm} \textbf{Lancer une fois toutes les nuits soit entre 21:00 et 23:00, soit entre 3:00 et 6:00} \\
\hspace{1mm} \%nightly,lavg(1.5,2,2) * 21-23,3-6 echo "Il est temps de récupérer\textbackslash{} \\
\hspace{1mm} la dernière version de Mozilla !" \\
\end{flushleft}
\end{document}
