« Cron » : différence entre les versions
(→Email) |
|||
Ligne 10 : | Ligne 10 : | ||
</kode> | </kode> | ||
{{info | Utiliser {{boxx|sudo}} pour accéder au cron de root.}} | {{info | Utiliser {{boxx|sudo}} pour accéder au {{boxx|cron}} de {{boxx|root}}.}} | ||
{{warn | Spécifier le chemin complet des exécutables.}} | {{warn | Spécifier le chemin complet des exécutables.}} | ||
Ligne 16 : | Ligne 16 : | ||
# format | # format | ||
# mm hh DD MM W /path/progam | # mm hh DD MM W /path/progam | ||
# run every day at 4:00 am | # run every day at 4:00 am | ||
Ligne 38 : | Ligne 33 : | ||
0 * * * * $HOME/mon_script.sh | 0 * * * * $HOME/mon_script.sh | ||
</filebox> | </filebox> | ||
{| class="wikitable wtp" | |||
|+ format | |||
! mm | |||
! hh | |||
! DD | |||
! MM | |||
! W | |||
|- | |||
| minute 0 - 59 | |||
| hour 0 - 23 | |||
| day_of_month 1 - 31 | |||
| month 1 - 12 | |||
| day_of_week 0 = Sunday - 6 | |||
|} | |||
== Éditeur par défaut == | == Éditeur par défaut == |
Version du 15 février 2021 à 16:44
crontab
# lister les tâches crontab -l # éditer les tâches crontab -e |
Utiliser sudo pour accéder au cron de root. |
Spécifier le chemin complet des exécutables. |
crontab |
# format # mm hh DD MM W /path/progam # run every day at 4:00 am 0 4 * * * $HOME/mon_script.sh # toutes les minutes se terminant par 0 ou 5, toutes les 5 minutes # entre 9:00 et 16:55 # pas de restriction sur day_of_month # pendant les mois de janvier à mai (inclu) et septembre à décembre, tous sauf juin, juillet et août # du lundi au vendredi (inclu) *0,*5 9-16 * 1-5,9-12 1-5 $HOME/mon_script.sh # toutes les 30 minutes */30 * * * * $HOME/mon_script.sh # toutes les heures 0 * * * * $HOME/mon_script.sh |
mm | hh | DD | MM | W |
---|---|---|---|---|
minute 0 - 59 | hour 0 - 23 | day_of_month 1 - 31 | month 1 - 12 | day_of_week 0 = Sunday - 6 |
Éditeur par défaut
~/.bashrc |
# par défaut l'éditeur est vi export EDITOR=/usr/bin/nano |
# forcer l'éditeur sudo EDITOR=nano crontab -e |
Si MAILTO est définit, la sortie du script est envoyée par email.
crontab |
MAILTO=compte@gmail.com MAILFROM=compte@mon-domaine.fr # ne fonctionne pas # MAILFROM par défaut: root@hostname # désactiver l'envoie d'emails MAILTO="" # Pour envoyer un email seulement si une erreur s'est produite, rediriger la sortie standard vers /dev/null # Ainsi un email sera envoyé seulement si quelque chose est écrit sur stderr 0 * * * * /path/mon_script.sh > /dev/null # une autre solution est de rediriger directement la sortie du script dans un mail: 0 * * * * /path/mon_script.sh 2>&1 | mail -s "Mon sujet" -r expéditeur@domaine.fr destinataire@domaine.fr |
Par défaut:
|
Envoyer un email seulement en cas d'erreur
On utiliser un script qui va lancer la tache cron et en fonction du code de retour, envoyer un email ou non.
crontab |
# désactiver l'envoie d'emails avec MAILTO MAILTO="" 0 * * * * /path/crontask_emailer.sh /path/mon_script.sh |
crontask_emailer.sh |
#!/bin/bash set -u set -e set -o pipefail OUT=/tmp/crontask_emailer.out.$$ set +e "$@" >$OUT 2>&1 RESULT=$? set -e if [ $RESULT -ne 0 ] then cat "$OUT" | mail -s "Cron task error: $@" -r expéditeur@domaine.fr destinataire@domaine.fr fi rm -f "$OUT" |
Installation de msmtp
Si Postfix n'est pas déjà installé.
# installation sudo pacman -S msmtp-mta # configuration system sudo cp /usr/share/doc/msmtp/msmtprc-system.example /etc/msmtprc # ou configuration par utilisateur cp /usr/share/doc/msmtp/msmtprc-user.example ~/.msmtprc # test sendmail -t << END_MESSAGE > To: xxx@gmail.com > Subject: sujet > message > END_MESSAGE echo "message" | mail -s "sujet" -r expéditeur@mon-domaine.fr destinataire@gmail.com |
~/.msmtprc |
# Accounts will inherit settings from this section defaults auth on tls on tls_trust_file /usr/share/ca-certificates/mozilla/Thawte_Premium_Server_CA.crt # A first gmail address account gmail host smtp.gmail.com port 587 from xxx@gmail.com user xxx@gmail.com password xxx tls_trust_file /etc/ssl/certs/ca-certificates.crt # Set a default account account default : gmail |
Modifier crontab depuis un script
# commenter une ligne crontab -l | sed 's|^[^#].*/script.sh|#\0|' | crontab - # décommenter une ligne crontab -l | sed 's|^#\(.*/script.sh\)|\1|' | crontab - |
Anacron
Cron n’exécute pas les tâches qui étaient programmées lorsque l'ordinateur était éteint.
Sur les postes de travail qui ne sont pas en permanence allumés, il est préférable d'utiliser « Anacron » pour s'assurer que si le poste était éteint à l'heure où la tâche était prévu, celle-ci ne sera pas perdu mais exécutée au prochain démarrage du poste.
Anacron exécute les scripts présents dans les répertoires suivants:
- /etc/cron.hourly/
- /etc/cron.daily/
- /etc/cron.weekly/
- /etc/cron.monthly/
Les scripts du dossiers « /etc/cron.hourly/ » ne fonctionne pas en asynchrone Si l'ordinateur n'est pas allumé, la tache n'est pas lancée au prochain démarrage. |
Anacron utilise l'utilisateur root pour exécuter ses tâches. |
Configuration
/etc/anacrontab |
SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # the maximal random delay added to the base delay of the jobs RANDOM_DELAY=45 # the jobs will be started during the following hours only START_HOURS_RANGE=3-22 #period in days delay in minutes job-identifier command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly |
Comme il est possible d'ajouter des scripts dans les dossiers « /etc/cron.*/ », il n'est pas nécessaire de modifier la configuration d'Anacron. |
Fichiers timestamp
Le dossier « /var/spool/anacron » contient les fichiers timestamp. Ces fichiers contiennent la date de la dernière exécution de leur tache.
/var/spool/anacron/cron.weekly |
20140616 |
Ici la tache cron.weekly a été exécutée le 16/06/2014. C'est cette date qui servira a calculer quand cette tache devra a nouveau être exécutée.
Debug
# affiche la sortie lorsque des tâches sont exécutées anacron -fnd |
Installation
Cronie est déjà installé (paquet base).
# démarrer cronie sudo systemctl start cronie # activer cronie au démarrage sudo systemctl enable cronie |