19
0
Fork 0

ajout d'infos

This commit is contained in:
gcolpart 2017-06-18 13:57:21 +02:00
parent 5075407fd6
commit 8193906e76
1 changed files with 84 additions and 36 deletions

View File

@ -33,30 +33,104 @@ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
~~~
On trouve notamment des dates fixées pour les actions définies dans les répertoires `/etc/cron.{hourly,daily,weekly,monthly}` : nous conseillons de modifier ces horaires fixes, pour éviter des déclenchements simultanés sur plusieurs serveurs.
On trouve notamment des dates fixées pour les actions définies dans les répertoires `/etc/cron.{hourly,daily,weekly,monthly}/` : nous conseillons de modifier ces horaires fixes, pour éviter des déclenchements simultanés sur plusieurs serveurs.
On peut également modifier certaines options via le fichier `/etc/default/cron`, notamment la journalisation : par défaut `-L 5` enregistre le démarrage de chaque cron et les éventuelles erreurs, on peut passer à `-L 15` pour avoir un maximum d'informations notamment la date de fin de chaque cron.
## Utilisation
### /etc/cron.{hourly,daily,weekly,monthly} et /etc/cron.d/
### /etc/cron.{hourly,daily,weekly,monthly}/ et /etc/cron.d/
Pour lancer un script à une date fixée par le système, il suffit de le placer dans l'un des répertoires `/etc/cron.{hourly,daily,weekly,monthly}` en fonction de la fréquence souhaitée ou dans `/etc/cron.d/` où l'on peut choisir une fréquence personnalisée.
Pour lancer un script en tant que _root_ à une date fixée par le système, il suffit de le rendre exécutable et de le placer dans l'un des répertoires `/etc/cron.{hourly,daily,weekly,monthly}/` en fonction de la fréquence souhaitée.
Pour une fréquence personnalisée, on peut utiliser le répertoire `/etc/cron.d/` où il faudra indiquer en plus la fréquence et l'utilisateur qui doit lancer la commande, par exemple :
~~~
30 05 * * 0 www-data /usr/local/adm/savelog-weekly
~~~
Attention, en cas d'erreur de syntaxe dans un script, tous les autres scripts du même répertoire ne seront pas lancés ! Il faut donc réserver cette utilisation à des scripts bien vérifiés (c'est notamment utilisé par les packages Debian).
### /etc/crontab
### crontab -e
Pour ajouter un cron manuellement, on conseille d'utiliser la commande :
### Détection d'erreurs
~~~
$ crontab -e
# crontab -u jdoe -e
~~~
On peut ajouter la configuration suivante au logiciel log2mail pour détecter d'éventuelles erreurs de syntaxe dans /etc/crontab par exemple :
L'un des avantages de cette commande est que la syntaxe sera vérifiée en quittant l'éditeur.
Pour lancer une commande à une fréquence personnalisée, la syntaxe est :
~~~
minutes heures jours mois jour/semaine commande
~~~
On peut utiliser __*__ pour toutes les occurences (tous les jours, ou toutes les heures, etc.). On peut également utiliser des listes à virgule (3,5,7) ainsi des intervalles (2-6) ; on peut aussi avoir des intervalles réguliers (*/15).
Exemples de crontab :
~~~
0,30,45,51 * * * * /usr/local/adm/send-data
*/15 * * * * /usr/local/adm/check-nis 1>/dev/null 2>&1
00 01 * * * nice -10 find /inf -name core -exec rm -f {} \;
10 03 * * 1-6 nice -10 /usr/local/adm/sauvegarde-daily
30 05 * * 0 /usr/local/adm/savelog-weekly
30 06 1 * * /usr/local/adm/savelog-monthly
00 00 1 1 * /usr/local/bin/happy-new-year
@daily /usr/local/bin/minuit-check
~~~
On peut utiliser les mots clés @hourly/@daily/@weekly/@montly pour lancer à la première minute de chaque heure/jour/semaine/mois (à ne pas confondre avec les répertoires /etc/cron.{hourly,daily,weekly,monthly}/ qui sont lancés à des dates particulières).
Pour plus d'informations sur la syntaxe :
~~~
$ man 5 crontab
~~~
Pour lister les crons, on peut utiliser la commande :
~~~
$ crontab -l
# crontab -u jdoe -l
~~~
Pour supprimer tous les crons en place, on peut utiliser `crontab -r` …mais c'est assez rare qu'on l'utilise. Il faut surtout se méfier de ne pas le taper par erreur à la place de `crontab -e` !
#### variables
Plusieurs variables peuvent être utilisées dans une crontab :
**PATH** : pour redéfinir le $PATH des commandes lancés
**SHELL** : par défaut c'est /bin/sh qui est utilisé, on peut vouloir utiliser /bin/bash par exemple
**MAILTO** : lorsqu'une commande génère une sortie (stdout/stderr), elle est envoyée par email à l'utilisateur. On peut changer l'email destinataire avec cette variable. On pourra notamment mettre une liste à virgule pour envoyer à plusieurs adresses, ou alors _MAILTO=""_ pour empêcher l'envoi d'un message.
Ces variables peuvent être définies plusieurs fois, notamment _MAILTO_ qui pourra précéder chaque ligne de cron :
~~~
MAILTO=jdoe@example.com,alert@example.com
@daily df -h
MAILTO=""
@hourly systemctl restart javajob
MAILTO=alert@example.com
@weekly /usr/local/bin/security-check
~~~
#### /var/spool/cron/crontabs/
Les crons positionnés avec `crontab -e` sont stockés dans le répertoire `/var/spool/cron/crontabs/`
C'est notamment utile pour réaliser des sauvegardes des crons lancés sur un serveur.
## log2mail
On peut ajouter la configuration suivante au logiciel log2mail pour détecter d'éventuelles erreurs de syntaxe :
~~~
file = /var/log/cron.log
@ -64,32 +138,6 @@ file = /var/log/cron.log
mailto = root
~~~
Fichiers
répertoire /var/spool/cron/crontabs/
Syntaxe : minutes heures jours mois jour/semaine commande
"*" = toutes les occurrences, "," = liste, "-" = intervalle
Ex :
0,15,30,45 * * * * /usr/local/adm/check-nis 1>/dev/null 2>&1
00 01 * * * nice -10 find /inf -name core -exec rm -f {} \;
10 03 * * 1-6 nice -10 /usr/local/adm/sauvegarde-daily
30 05 * * 0 /usr/local/adm/savelog-weekly
30 06 1 * * /usr/local/adm/savelog-monthly
00 00 1 1 * /usr/local/bin/happy-new-year
Commande :
cron: analyse des fichiers crontabs et exécute les actions
crontab -l, crontab -e, crontab -r
ps auwx | grep cron
vim /etc/crontab
ls /etc/cron.*
/var/spool/cron/crontabs
crontab -l / -e
@hourly @daily @weekly @monthly
man 5 crontab
## FAQ