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
# after reboot
@reboot $HOME/mon_script.sh
# 60 seconds after reboot
@reboot sleep 60 && $HOME/mon_script.sh
|
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
~/.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=""
|
|
Par défaut:
- expéditeur root@hostname
- destinataire cron-user@hostname
- sujet Cron <user@hostname> command
|
crontab
|
0 * * * * cronic /path/mon_script.sh
|
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
|