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
# mm minute values can be from 0 to 59.
# hh hour values can be from 0 to 23.
# DD day_of_month values can be from 1 to 31.
# MM month values can be from 1 to 12.
# W day_of_week values can be from 0 to 6, 0 = Sunday.
# 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
|
É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:
- expéditeur root@hostname
- destinataire cron-user@hostname
- sujet Cron <user@hostname> command
|
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
|