Guide d'utilisation de Cron
1.
Cron, la base
À quoi sert cron ?
Cron est un démon qui lance des tâches qui ont été planifiées à l'aide de la
commande crontab. Pour cela, il se réveille à chaque minute pour vérifier
s'il n'y a pas une tâche à lancer en regardant les crontabs des utilisateurs.
Note :
Notez que crontab est à la fois le nom de la liste d'applications à
lancer et le nom de la commande qui permet d'éditer cette même liste.
|
Plusieurs implémentations
Il existe plusieurs implémentations de cron dans Portage, parmi lesquelles vous
devrez en choisir une à installer. Toutes les implémentations offrent une
interface similaire, appelée crontab. Il existe également un outil appelé
Anacron qui permet de travailler avec cron sur les systèmes qui ne sont pas
allumés en permanence.
Il est également important de noter que chacun des paquets cron dépend de
sys-process/cronbase. Ce paquet n'est pas techniquement requis par les
implémentations de cron, mais apportent des fonctionnalités supplémentaires que
la plupart des utilisateurs apprécieront.
Avant de commencer à travailler avec cron, vous devez choisir quelle
implémentation vous voulez utiliser. Pour vous permettre de faire le choix
adéquat, le chapitre suivant contient des informations sur chacune d'entre
elles.
2.
Quel est le meilleur cron pour vous ?
Vixie Cron
Vixie Cron est une implémentation complète de cron basée sur SysV cron. Chaque
utilisateur possède sa propre crontab et peut y spécifier des variables
d'environnement. À la différence des autres variantes de cron, il supporte
SELinux et PAM. Il supporte moins d'architectures que Dcron mais plus que Fcron.
Voici les fonctionnalités de sys-process/vixie-cron :
- Supporte SELinux.
- Supporte le fichier /etc/security/limits.conf de PAM.
-
Chaque utilisateur peut avoir son propre crontab. L'accès est contrôlé par
les fichiers cron.allow et cron.deny.
Dillon's Cron
Dcron est une implémentation simple, élégante et sûre de cron. Il ne permet pas
de spécifier des variables d'environnement dans les crontabs et toutes les
tâches sont lancées avec /bin/sh. Comme dans Vixie Cron, chaque
utilisateur possède son propre crontab.
Voici les fonctionnalités de sys-process/dcron :
- Rapide, simple et sans fonctionnalité superflue.
-
L'accès à crontab est limité au groupe cron, il n'utilise aucune
autre source externe pour les permissions.
Fcron
Le but de Fcron est de remplacer Vixie Cron et Anacron. Il est conçu pour
fonctionner sur des systèmes qui ne sont pas en marche en permanence et il
possède des fonctionnalités avancées. Il sait gérer les contraintes de démarrage
des tâches, les contrôles de mise en série des tâches, la possibilité de
spécifier des valeurs pour nice et la possibilité de lancer des tâches au
démarrage du système. Visitez le site de
fcron pour plus d'informations.
Voici les fonctionnalités de sys-process/fcron :
-
Conçu pour fonctionner sur les systèmes qui ne sont pas allumés en
permanence, il peut lancer une tâche au démarrage si son heure est passée.
-
Le crontab peut contenir des variables d'environnement ainsi que beaucoup
d'autres options.
-
Chaque utilisateur peut avoir son propre crontab. L'accès est contrôlé par
les fichiers cron.allow et cron.deny.
-
La syntaxe crontab est améliorée par de nombreuses nouvelles
fonctionnalités supportées.
bcron
brcron est un nouveau système cron visant à sécuriser les opérations. Pour cela,
le système est divisé en plusieurs programmes distincts, chacun étant
responsable d'une tâche précise, et les communications entre eux étant
strictement contrôlées. L'interface utilisateur est une alternative pour les
systèmes similaires (tels que vixie-cron), mais les éléments internes diffèrent
grandement. Pour plus d'informations, consultez le site de bcron à
http://untroubled.org/bcron/.
Fonctionnalités de sys-process/bcron:
- Alternative à vixie-cron
- Technologie multitraitement
- Support natif des sauvegardes matinales
Anacron
Anacron n'est pas un démon cron. C'est un programme qui fonctionne en
collaboration avec l'un d'entre eux. Il exécute des commandes à des intervalles
spécifiés en jours et ne présume pas que le système fonctionne en permanence. Il
lancera les tâches qui ne l'ont pas été pendant que le système était éteint.
Anacron s'utilise en général avec un démon cron pour le lancer chaque jour.
3.
Utilisation de cron
Installation
Sélectionnez l'implémentation de cron que vous préférez, puis installez-la.
Exemple de code 3.1 : Installer cron |
# emerge dcron
# /etc/init.d/dcron start
# rc-update add dcron default
|
Si vous n'avez pas installé Fcron, vous pouvez éventuellement installer Anacron.
Exemple de code 3.2 : Installer anacron |
# emerge anacron
# /etc/init.d/anacron start
# rc-update add anacron default
|
Le crontab du système
À la fin de l'installation, certains des paquets cron vous demandent de lancer
la commande crontab /etc/crontab. Le fichier /etc/crontab
est le crontab de votre système. Une installation de cron peut l'utiliser
avec sys-process/cronbase pour lancer les scripts situés dans
/etc/cron.{daily,hourly,weekly,monthly}. Notez que seul Vixie Cron
planifie automatiquement les tâches situées dans /etc/crontab. Les
utilisateurs de Dcron et Fcron devront lancer crontab /etc/crontab à
chaque modification du fichier /etc/crontab.
Veuillez noter que les tâches planifiées dans le crontab système ne seront pas
forcément affichées dans la liste des tâches donnée par crontab -l.
Bien sûr, peut-être que vous ne voudrez pas utiliser de crontab système du tout.
Dans ce cas, si vous utilisez Dcron ou Fcron, ne lancez pas crontab
/etc/crontab. Si vous utilisez vixie-cron ou bcron, vous devrez commenter
toutes les lignes du fichier /etc/crontab.
Exemple de code 3.3 : Commenter toutes les lignes de /etc/crontab |
# sed -ie "s/^/#/" /etc/crontab
|
Donner l'accès à cron aux utilisateurs autorisés
Si vous voulez que d'autres utilisateurs que root aient accès au démon cron,
alors lisez cette section. Sinon, vous pouvez passer directement à la section
suivante, « Planifier une tâche ».
Note :
Donner à un utilisateur la permission d'avoir un crontab ne lui permet pas
d'exécuter des tâches en tant que root. Si vous voulez qu'un utilisateur puisse
éditer le crontab de root, vous devriez penser à utiliser sudo. Vous
trouverez plus de détails dans notre Guide
Sudo.
|
Quel que soit le paquet cron utilisé, si vous voulez permettre à un utilisateur
d'avoir un crontab, la première chose à faire est de l'intégrer au groupe cron.
Par exemple, si vous voulez ajouter l'utilisateur wepy au groupe cron,
vous taperez :
Exemple de code 3.4 : Ajouter un utilisateur au groupe cron |
# gpasswd -a wepy cron
|
Note :
Après avoir ajouté un utilisateur à un groupe, l'utilisateur en question doit
se reconnecter pour que vos modifications soient prises en compte.
|
Si vous utilisez Dcron, c'était tout ce qu'il y avait à faire pour
permettre à un utilisateur d'avoir son crontab. Les utilisateurs de Dcron peuvent
maintenant passer à la section suivante « Planifier
une tâche ».
Si vous utilisez Fcron, vous devrez éditer les fichiers
/etc/fcron/fcron.deny et /etc/fcron/fcron.allow. La
manière la plus sûre est d'abord d'interdire tout le monde dans
/etc/fcron/fcron.deny, puis d'autoriser explicitement chaque
utilisateur dans /etc/fcron/fcron.allow.
Important :
Si ni le fichier /etc/fcron/fcron.allow, ni
/etc/fcron/fcron.deny n'existent, tous les utilisateurs du groupe
cron auront le droit d'utiliser crontab. Le fichier
fcron.allow par défaut de fcron permet à tous les
utilisateurs du groupe cron d'accéder à fcrontab.
|
Exemple de code 3.5 : Permissions dans fcron.deny |
all
|
Maintenant, disons que l'utilisateur wepy devrait avoir le droit de
planifier ses propres tâches. Nous l'ajoutons au fichier
/etc/fcron/fcron.allow de la façon suivante :
Exemple de code 3.6 : Permissions dans fcron.allow |
wepy
|
Si vous aviez choisi Vixie cron, vous pouvez vous contenter d'éditer le
fichier /etc/cron.allow.
Important :
Il est important de noter que si seul le fichier /etc/cron.allow
existe, alors uniquement les utilisateurs du groupe cron qui sont listés dans ce
fichier auront le droit d'avoir un crontab. Par contre, si seul un fichier
/etc/cron.deny vide existe, alors tous les utilisateurs du groupe
cron y auront droit. Ne laissez pas /etc/cron.deny vide si vous
n'avez pas de /etc/cron.allow.
|
Par exemple, si vous voulez permettre l'accès à l'utilisateur wepy, vous
l'ajouterez au fichier /etc/cron.allow comme suit :
Exemple de code 3.7 : Permissions dans /etc/cron.allow |
wepy
|
Planifier une tâche
La procédure d'édition du crontab diffère d'un paquet à l'autre, mais ils
supportent tous le même ensemble de commandes de base : ajouter et
remplacer des crontabs, éditer des crontabs, supprimer des crontabs et lister
les tâches des crontabs. La liste suivante vous montre comment procéder pour
chaque paquet.
| Version |
Éditer le crontab |
Supprimer le crontab |
Nouveau crontab |
Lister le crontab |
| dcron |
crontab -e |
crontab -d [user] |
crontab fichier |
crontab -l |
| fcron |
fcrontab -e |
fcrontab -r [user] |
fcrontab fichier |
fcrontab -l |
| vixie-cron & bcron |
crontab -e |
crontab -r -u [utilisateur] |
crontab fichier |
crontab -l |
Note :
Si vous ne spécifiez pas d'utilisateur pour supprimer le crontab, il supprimera
celle de l'utilisateur courant.
|
Note :
Fcron fait un lien symbolique de crontab vers fcrontab.
|
Avant de pouvoir utiliser ces commandes, vous devez d'abord comprendre comment
fonctionne le crontab elle-même. Chaque ligne d'une crontab doit spécifier cinq
champs temporels dans l'ordre suivant : les minutes (0-59), les heures
(0-59), les jours du mois (1-31), les mois (1-12) et les jours de la semaine
(0-7, lundi étant 1 et dimanche étant 0 ou 7). Les jours de la semaine et les
mois peuvent être spécifiés en utilisant leur abréviation anglaise : mon,
tue, jan, feb, etc. Chaque champ peut aussi contenir un intervalle de valeurs
(par exemple : 1-5 ou mon-fri), une liste de valeurs séparées par une
virgule ou un intervalle de valeurs avec un pas associé (par exemple
1-6/2 est équivalent à 1,3,5).
Cela doit vous paraître un peu déroutant, mais, avec quelques exemples, vous
verrez que ce n'est pas si compliqué.
Exemple de code 3.8 : Exemples |
* * * * * /bin/false
35 1 4 * mon-wed /bin/false
25 22 2 3 * /bin/true
0 2 * * 1-5/2 /bin/false
|
Note :
Remarquez bien que vous devez spécifier les jours de la semaine et les jours du
mois pour qu'ils soient combinés. Si vous mettez * pour l'un des deux champs,
uniquement l'autre sera pris en compte. Enfin, si vous mettez * pour les deux,
la tâche sera exécutée tous les jours.
|
Pour tester tout ce que vous venez d'apprendre, franchissons le pas et ajoutons
quelques tâches planifiées. Premièrement, créez un fichier nommé
crons.cron et faites-le ressembler à ceci :
Exemple de code 3.9 : Éditer crons.cron |
# nano crons.cron
10 3 1 1 * /bin/echo "je n'aime pas vraiment cron"
30 16 * 1,2 * /bin/echo "j'aime un peu cron"
* * * 1-12/2 * /bin/echo "cron c'est de la balle !"
|
Nous pouvons maintenant ajouter ce crontab au système grâce à la
« commande de création » que nous avons vue précédemment.
Exemple de code 3.10 : Un nouveau crontab |
# crontab crons.cron
|
Note :
Vous ne verrez pas les sorties des « echo » que nous avons programmés
tant que vous n'utiliserez pas de redirection.
|
Pour vérifier que les tâches ont été correctement prises en compte, nous
utiliserons la « commande pour lister ».
Exemple de code 3.11 : Lister les tâches planifiées |
# crontab -l
|
Vous devriez voir quelque chose qui ressemble fortement au fichier
crons.cron. Si ce n'est pas le cas, vous avez peut-être utilisé une
mauvaise commande pour entrer les tâches.
Ce crontab doit afficher « cron c'est de la balle ! » à chaque
minute de chaque heure de chaque jour de chaque mois impair. Évidemment, vous
n'avez à faire ceci que si vous aimez vraiment cron. Le crontab fera également
afficher « j'aime un peu cron » chaque jour de janvier et février à
16h30 et « je n'aime pas vraiment cron » le premier janvier à 3h10.
Si vous utilisez Anacron, continuez à lire cette section. Sinon, vous pouvez
passer à la section suivante, « Éditer le
crontab ».
Les utilisateurs d'Anacron doivent aussi éditer le fichier
/etc/anacrontab. Ce fichier possède quatre champs : le nombre
de jours entre chaque lancement, le délai en minutes à imposer après son
lancement, le nom de la tâche et la commande à lancer.
Par exemple, pour qu'il lance la commande echo "j'aime anacron" tous les
cinq jours, dix minutes après qu'Anacron soit démarré, vous mettriez :
Exemple de code 3.12 : /etc/anacrontab |
5 10 perte-de-temps /bin/echo "j'aime anacron"
|
Anacron se termine une fois que toutes les tâches de l'anacrontab ont été
exécutées. Ainsi, si nous voulons qu'il vérifie les tâches à exécuter tous les
jours, nous devons utiliser cron. Les instructions à la fin de la section
suivante vous indiqueront comment faire.
Éditer le crontab
À présent, soyons un peu réalistes. Vous n'avez certainement pas besoin que
votre système vous rappelle chaque minute à quel point vous aimez cron. Afin
d'avancer, nous allons enlever ce crontab en utilisant la « commande de
suppression » vue précédemment et nous listerons ensuite les tâches pour
nous assurez que cela a marché.
Exemple de code 3.13 : Supprimer et lister le crontab |
# crontab -d
# crontab -l
|
Vous ne devriez pas voir de tâche listée par crontab -l. Si ce n'est pas
le cas, c'est que nous n'avons pas réussi à retirer le crontab. Assurez-vous
d'avoir utilisé la bonne « commande de suppression » appropriée pour
votre paquet.
Maintenant que tout est propre, mettons quelque chose d'utile dans le crontab de
root. La plupart des gens voudraient lancer updatedb
hebdomadairement pour être s'assurer que slocate fonctionne correctement.
Pour ajouter ça à votre crontab, commencez par ouvrir le fichier
crons.cron et faites-le ressembler à ceci :
Exemple de code 3.14 : Un vrai crontab |
22 2 * * 1 /usr/bin/updatedb
|
Cela aura pour effet de lancer updatedb tous les lundis matins à 2h22.
Insérons maintenant ce crontab avec la « commande de création » vue
précédemment et vérifions notre travail.
Exemple de code 3.15 : Lister les tâches cron |
# crontab crons.cron
# crontab -l
|
Maintenant, disons que vous voulez aussi ajouter emerge --sync à la liste
de vos tâches quotidiennes. Vous pouvez faire cela en éditant
crons.cron puis en faisant crontab crons.cron comme nous
l'avons fait précédemment, mais vous pouvez également utiliser la
« commande d'édition » appropriée vue dans le tableau plus haut. Cela
vous donne la possibilité d'éditer le crontab de votre utilisateur sans devoir
utiliser un fichier externe comme crons.cron.
Exemple de code 3.16 : Éditer directement un crontab |
# crontab -e
|
Cela devrait ouvrir votre crontab dans un éditeur de texte. Nous voulons lancer
emerge --sync tous les jours à 6h30 du matin ; voici ce que cela
donnerait :
Exemple de code 3.17 : Une vraie crontab |
22 2 * * 1 /usr/bin/updatedb
30 6 * * * /usr/bin/emerge --sync
30 7 * * * /usr/sbin/anacron -s
|
Encore une fois, vérifiez la liste des tâches cron, comme nous l'avons fait dans
les exemples précédents, afin de vous assurer que tout est correct.
4.
Utiliser cronbase
Comme nous l'avons mentionné plus haut, tous les paquets cron disponibles
dépendent de sys-process/cronbase. Le paquet cronbase crée les fichiers
/etc/cron.{hourly,daily,weekly,monthly} ainsi qu'un script appelé
run-crons. Vous noterez que le crontab système par défaut
(/etc/crontab) contient ces lignes :
Exemple de code 4.1 : Crontab système par défaut |
*/15 * * * * test -x /usr/sbin/run-crons && /usr/sbin/run-crons
0 * * * * rm -f /var/spool/cron/lastrun/cron.hourly
0 3 * * * rm -f /var/spool/cron/lastrun/cron.daily
15 4 * * 6 rm -f /var/spool/cron/lastrun/cron.weekly
30 5 1 * * rm -f /var/spool/cron/lastrun/cron.monthly
|
Pour éviter de rentrer trop dans les détails, acceptons le fait que ces
commandes permettront l'exécution de vos scripts mensuels, hebdomadaires, etc.
Cette manière de planifier des tâches comporte certains avantages :
-
Les tâches sont exécutées même si l'ordinateur était éteint lorsqu'elles
auraient dues être lancées.
-
La possibilité de mettre un script dans un tel endroit bien défini facilite
la vie des mainteneurs d'applications.
-
Vous savez exactement où sont placées vos tâches et vos crontab, ce qui
facilite la sauvegarde du système.
Note :
Encore une fois, nous rappelons que Vixie Cron et bcron lisent automatiquement
/etc/crontab, ce qui n'est pas le cas de dcron et fcron. Veuillez
vous reporter à la section « Le crontab du
système » pour en lire plus à ce sujet.
|
5.
Pour finir
Problèmes
Si vous avez du mal à faire marcher cron correctement, vous serez certainement
intéressé par cette liste de vérifications :
-
Est-ce que cron tourne ? Faites ps ax | grep cron et
vérifiez qu'il soit présent !
-
Est-ce que cron marche ? Essayez :
« * * * * * /bin/echo "test" >> /tmp/crontest » et vérifiez
que crontest est bien écrit.
-
Est-ce que votre commande fonctionne ? Essayez :
« * * * * * /bin/votre_commande > /tmp/crontab.log 2>&1 »
et cherchez-y des erreurs.
-
Est-ce que cron peut exécuter votre tâche ? Cherchez des erreurs
dans le journal de cron qui se trouve, en général, dans
/var/log/cron.log ou /var/log/messages.
-
Y a-t-il des dead.letter ? Cron envoie généralement un mail
lorsqu'il y a un problème. Vérifiez votre messagerie ou cherchez dans le
fichier ~/dead.letter.
Souvenez-vous que chaque paquet cron est différent et que les fonctionnalités
proposées varient énormément de l'un à l'autre. Assurez-vous d'avoir lu les
pages de manuel de crontab, fcrontab ou anacron, selon ce que vous utilisez.
Bonne chance !
Ce document est protégé par la licence Creative
Commons : Paternité - Partage des Conditions Initiales à
l'Identique 2.5.
|