ajout d'infos

This commit is contained in:
gcolpart 2017-06-18 13:57:21 +02:00
parent 5075407fd6
commit 8193906e76

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 ) 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. 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 ## 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). 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 ### 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 file = /var/log/cron.log
@ -64,32 +138,6 @@ file = /var/log/cron.log
mailto = root 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 ## FAQ