Table des matières
CRON : Plannificateur de tâches : La totale !
Auteur : cmx
Date : 5 janvier 2004
Le service crond :
- Il est chargé de faire exécuter par le système toutes tâches (commandes et scripts) définies et planifiées à l`avance ( Cron vient certainement de chronos étant le dieu du temps ) .
- Les tâches alloués à Cron sont définis à une heure fixe et peuvent être périodique.
- Son usage est plutôt employé par Root ( le super-Utilisateur ) mais il est possible en créant un fichier incorporant la liste des utilisateurs autorisés. Ce fichier doit s`appeler cron.allow et doit se trouver dans /etc soit “/etc/cron.allow”.
- Sa configuration se fait en tapant la commande “crontab -e”. L`option “ -e ” represente la demande de configuration de cron sur l`utilisateur en cours de session. Pour être plus clair chaque utilisateur, ainsi que Root possèdent son propre fichier de configuration cron qui se trouve dans “/var/spool/cron/nom-utilisateur” mais ne modifier pas ces fichiers directement ! Passez par la commande “crontab -e”.
Fonctionnement de crond :
Normalement crond est lancé automatiquement au démarrage. Nous pouvons cependant le faire démarrer manuellement en allant dans le répertoire “ /init.d ” :
3 commandes possibles :
- “/etc/rc.d/init.d/crond stop” ( Arrête le service crond )
- “/etc/rc.d/init.d/crond start” ( Démarre le service crond )
- “/etc/rc.d/init.d/crond restart” ( Arrête et redemarre le service crond )
Lorsque cron s`exécute pour une tâche il inscrit dans un de ses fichiers log certaines données. Ces fichiers se trouvent dans “/var/log/cron/” et sont au nombre de 3 :
- info ( Cron indique la tâche réussie )
- warnings ( Cron indique les problème rencontrés, ligne(s) ignorées, etc.. )
- errors ( Cron indique qu`il n`a pas pu réaliser sa tâche )
Évidemment, au fil du temps le fichier info se garnit et peut prendre de la place inutilement, il faut donc le purger et pourquoi pas le faire avec une tâche crontab ! .
Crontab et ses options :
Au menu, 4 options,
- crontab -l ( Affiche le fichier crontab de l`utilisateur en cours de session )
- crontab -l -u pierre ( Affiche le fichier crontab de l`utilisateur pierre )
- crontab -r ( Efface (!) le fichier crontab de l`utilisateur en cours de session )
- crontab -e ( Expliqué précédemment ;) )
Syntaxe de crontab :
Nous y voilà, comment créer une tâche ? Contrairement à ce qu`on pourrait constater en voyant le fichier crontab , cela n`est pas compliqué … suffit de suivre ! :
Voici un fichier crontab de root par exemple :
############################################ # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.1435 installed on Thu Feb 12 08:57:34 2004) SHELL="/bin/bash" PATH="/sbin:/bin:/usr/sbin:/usr/bin MAILTO="MON-EMAIL@linuxpourlesnuls.ath.cx" HOME="/ 01 * * * * root nice -n 19 run-parts /etc/cron.hourly 02 4 * * * root nice -n 19 run-parts /etc/cron.daily 22 4 * * 0 root nice -n 19 run-parts /etc/cron.weekly 03 1 * * * root nice -n 19 run-parts /etc/cron.monthly 08 20 * * * /usr/PROGRAMMES/scripts/monscript ###########################################
Chaque ligne contient 6 champs, les 5 premiers ( 01 * * * * dans l`exemple ) vont déterminer les moments de l`exécution des tâches, ce sont les “champs temporels”. Ainsi le 6ème champ va correspondre à la tâche à exécuter.
- 1er champ : Représente les minutes ( de 0 à 59 )
- 2ème champ : Représente les heures ( de 0 à 23 )
- 3ème champ : Représente les jours du mois ( de 1 à 31 )
- 4ème champ : Représente les mois de l`année ( de 1 à 12 )
- 5 ème champ : Représente les jours de la semaine ( de 0 à 6 : dimanche = 0 )
Chaque “champ temporel” peut contenir :
- Une valeur précise ( 20 pour le champ minute pourrait correspondre )
- Une liste de valeur séparées par une virgule ( 1,4,5 ou mars,avril,mai mais seulement pour le champ mois évidemment )
- Un interval grâce à un trait d`union ( 1-4 pourrait représenter du lundi au jeudi dans le champ jour )
- “ * ” correspond à “ toutes valeurs possibles ” ( Si dans le champ jour une * est placée, alors la tâche sera réalisée tous les jours )
- “ / ” peut permettre plus d`information : “ */5” dans le champ minute indiquera “ toutes les 5 minutes ” ou “ 0-23/3 ” dans le champ heure indiquera “ toutes les 3 heures ”.
La fonction “ MAILTO ” vous permet de rediriger le résultat d`une tâche par ……….. tagadagadagadagadagada … par mail !! ( Oui je sais, c`était pas terrible ;) )
Laissons maintenant place aux exemples !!
EXEMPLES
Exemples simples :
Une petite série d`exemples ne fera pas de mal ;).
- Lancer une tâche le 1er et 15 du mois à 1h du matin :
0 0 1,15
- Rebooter la machine une fois par mois, le 7, à 3h du matin :
0 3 7 * * /sbin/shutdown -r
- Lancer un script tous les Mardi à 3 h 30 du matin :
30 3 * * 2 /usr/monscript
- Lancer un script tous les matins, du Lundi au Vendredi à 6h15 :
15 6 * * 1-5 /home/monscript
- Plus dur ;) … Lancer une tâche tous les 1/4 d`heure de 15h à 18h, du Lundi au Vendredi et cela, seulement la 1ère quinzaine du 3ème trimestre :
0,15,30,45 15-18 1-15 7-9 1-5 /usr/ma tâche
- Une commande directe, trouver puis supprimer du répértoire /tmp les fichiers non-modifiés et datant de plus de 31 jours.La tâche se fera tous les 1er de chaque mois à 2h du matin :
0 2 1 * * find /tmp -atime 31 -exec rm -f {} ;
Exemples pratiques :
- Sauvegarde des répertoires personnels dans /home le 1er du mois à 18h :
0 18 1 * * /usr/monscript
Détail du fichier " monscript ":
#!/bin/sh #SAUVEGARDE DES REPERTOIRES PERSONNELS date="$(date) set -- $date tar -czvf /var/sauvegarde/home/home.$3$2$6.tgz /home/*
- Pratique, ce script vous permettra de vérifier si le service “SAMBA” est en cours de fonctionnement ou non. Si ce n`est pas le cas, le script relance le service et vous prévient par E-mail.Nous prévyons de vérifiez cela tous les 15 minutes :
15 * * * * /usr/verifsamba
Détail du fichier " verifsamba ":
#!/bin/sh #VERIFICATION DU SERVICE SAMBA /sbin/pidof smbd > /dev/null if [ $? = 1 ] then /etc/rc.d/init.d/smb stop /etc/rc.d/init.d/smb start echo "Redemarrage de Samba" | mail -s "[SAMBA VERIFICATION]" monemail@qqch.fr fi
ATTENTION : les 2dernières lignes avant “fi” n`est qu`une seule et même ligne !
- Vérifions maintenant si l`ADSL est toujours connecté sinon on reconnecte : comme le script précédent, toutes les 15 minutes :
15 * * * * /usr/verifadsl
Détail du fichier " verifadsl ":
#!/bin/sh #VERIFICATION DE LA CONNEXION if ! ping -c 1 195.165.15.65 > /dev/null 2>&1 then /usr/bin/killall pppd ppoe sleep 40 /usr/sbin/ppoe/ 10.0.0.20 fi
195.165.15.65 représente une adresse ip qui peut être “pinguée” sur internet.Ex : prenez www.google.fr, faite “ping www.google.fr” et relever son adresse IP puis remplacer celle de l`exemple par celle-ci.
l`adresse 10.0.0.20 représente l`adresse IP de votre modem, bien évidemment à modifier également par la votre.
Voilà, ce tutorial prend fin ici en espérant vous avoir bien aidé. Si vous souhaitez récuperer quelques scripts sympa, dirigez-vous dans la rubrique “Téléchargements” section “Scripts”.