LinuxPedia

Wiki libre et indépendant dédié à GNU-Linux et BSD.

Outils pour utilisateurs

Outils du site


etc:crontab

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 ! :-D.


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 ! :-D :

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 !! :-D ( 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”.

etc/crontab.txt · Dernière modification : 2018/11/17 12:53 de 127.0.0.1