crond
cron vient de chronos, le dieu du temps !)
/usr/bin/crontab permet cette programmation. Son usage est en principe réservée à
root. On peut toutefois autoriser certains utilisateurs.
Pour cela on en dresse la liste sur des lignes successives dans le fichier /etc/crond.allow, et de
façon symétrique, on peut mettre dans /etc/crond.deny la liste des utilisateurs non autorisés.# ll cron.allow jean toto
crond est normalement lancé au démarrage./etc/init.d/cron
/var/spool/cron/crontabs et /etc/cron.d,
pour voir si des tâches doivent être immédiatement exécutées.Ces fichiers portent le nom des utilisateurs propriétaires de la tâche.
crond ajoute une ligne de message dans le fichier /var/log/cron, qu'on peut purger
de temps en temps ... par une commande crontab !
crontab [-u user] {-l | -r | -e }
Options :
crontab -l affiche le fichier crontab de l'utilisateur
crontab -r efface ce fichier
crontab -l -u jean root examine le fichier crontab de l'user jean
crontab -e crée ou édite (pour modification) un fichier temporaire dans /tmp
ouvert dans vi/var/spool/cron/crontabs/$USER, où $USER est le nom de login de l'utilisateur.
crontab
Chaque ligne du fichier contient 6 champs, les 5 premières déterminent les moments d'exécution de la tâche décrite au 6ème champ.
#!/bin/bash [ -x /usr/sbin/logrotate ] || exit 0 /usr/sbin/logrotate /etc/logrotate.confDans /etc/cron.daily/aptitude
/var/log/aptitude {
rotate 6
monthly
compress
notifempty
}
Combien de temps sont conservés les logs d'Apache2 ? de Mysql ?
# exécution d'une commande chaque 1er et 15 de chaque mois à minuit
0 0 1,15 * * commande
# exécution d'une commande toutes les heures passées 15 minutes
15 * * * * commande
# exécution d'une commande tous les matins du lundi au vendredi à 7 h 30
30 7 * * 1-5 commande
# exécution tous les quarts d'heure de 15h à 19h du lundi au vendredi
# seulement en 1ère quinzaine du troisième trimestre
0,15,30,45 15-19 1-15 7-9 1-5 commande
# provoquer un reboot la machine chaque 1er et 15 du mois à 2h 30 du matin
30 2 1,15 * * /sbin/shutdown -r
# appeler un script de sauvegarde backup.sh, tous les lundis a 3 h 15 du matin
15 3 * * 1 /usr/bin/backup.sh
# trouver puis nettoyer le répertoire /tmp des vieux fichiers (non modifiés
# depuis 31 jours) tous les 1er jour de chaque mois, à 2 heures du matin
0 2 1 * * find /tmp -atime 31 -exec rm -f {} \;
crond est-il en exécution ? comment est-il lancé au démarrage ?
toto ajoute toutes les 5 minutes un petit "Bonjour ! " suivi de la date, dans le fichier /tmp/bonjour.txt
Sauvegarde quotidienne des répertoires personnels
/home dans un répertoire var/sauve/ à créer
/home/* dans un fichier home.tgz à placer dans /var/sauve
date, écrire
un script permettent l'archivage du 12 nov dans un fichier nommé home.12nov.tgz
cron, à ... 1h du matin
/etc/crontab
# run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthlyFichier
/usr/bin/run-parts
#!/bin/bash # run-parts - concept taken from Debian
............
for i in $1/* ; do
[ -d $i ] && continue
if [ -x $i ]; then
$i
fi
done
exit 0
toto étant un utilisateur autorisé $ crontab -e # toto ajoute la ligne (echo -n inhibe le passage à la ligne) : */5 * * * * (echo -n "Bonjour ! nous sommes le ";date ) >> /tmp/bonjour.txt
0 9-17 * * 1-5 (ps aux ; echo "***************" ) >> /var/log/processus.txt */15 9-17 * * 1-5 who >> /var/log/qui.txt
#!/bin/bash # fichier sauve_home.sh date=$(date) set -- $date tar czvf /var/sauve/home.$3$2$6.tgz /home/* # extrait de crontab de root (fichier /etc/spool/cron/root) 0 1 * * * /var/home/sauve_home.sh
#!/bin/sh # script surveille_smb /sbin/pidof smbd > /dev/null if [ $? = 1 ] then /etc/rc.d/init.d/smb stop /etc/rc.d/init.d/smb start echo "Redémarrage de samba" | mail -s "[SAMBA]" root@p0x.fctice.fr fi # fichier crontab */2 * * * * /bin/surveille_smb