Cron

De Banane Atomic
Version datée du 1 octobre 2023 à 12:31 par Nicolas (discussion | contributions) (→‎crontab)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche

crontab

Bash.svg
# 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

# tout les 1er de chaque mois à 8h00
0 8 1 * *          $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
Bash.svg
# forcer l'éditeur
sudo EDITOR=nano crontab -e

Email

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

Envoyer un email seulement en cas d'erreur avec Cronic

Installer cronic

crontab
0 * * * *       cronic /path/mon_script.sh

Installation de msmtp

Si Postfix n'est pas déjà installé.

Bash.svg
# 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

Bash.svg
# 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

Bash.svg
# affiche la sortie lorsque des tâches sont exécutées
anacron -fnd

Installation

Cronie est déjà installé (paquet base).

Bash.svg
# démarrer cronie
sudo systemctl start cronie

# activer cronie au démarrage
sudo systemctl enable cronie