Anacron, c’est pas une insulte

Pour lancer des tâches périodiques, de maintenance  ou autres, rien de mieux que Anacron

Anacron c’est quoi ?

Anacron est un dispositif prêt à l’emploi pour lancer une tâche périodique. Anacron a déjà un environnement pour  lancer des tâches quotidiennes, hebdomadaires ou mensuelles mais on peut facilement ajouter la gestion de tâches chaque heure.

Anacron se substitue à Cron qui est plutôt utilisé sur les serveurs qui restent en activité en permanence .

Sur un PC que l’utilisateur démarre n’importe quand puis arrête,  Anacron lance les tâches au premier démarrage du jour quelque soit l’heure. Anacron permets de « rattraper » le temps.

Attention Anacron n’est lancé que si votre alimentation sur secteur est branchée.

Les ressources

La table de déclenchement /etc/anacrontab

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root

# These replace cron's entries
0 50 cron.hourly run-parts --report /etc/cron.hourly
1 5 cron.daily run-parts --report /etc/cron.daily
7 20 cron.weekly run-parts --report /etc/cron.weekly
@monthly 35 cron.monthly run-parts --report /etc/cron.monthly

Cette table est celle modifiée pour y ajouter la gestion des tâches chaque heure.

  • Premier paramètre: la périodicité

0 chaque heure, 1 quotidienne, 7 hebdomadaire, @monthly mensuelle

  • Deuxième paramètre: l’ indication du minutage pour le lancement des tâches et éviter les embouteillages de tâches
  • Troisième  paramètre: le nom du dossier contenant les tâches à lancer.

Donc les tâches quotidiennes seront lancées 5 mn après le premier démarrage du PC.

Les dossiers des tâches à lancer

Les tâches chaque heure

ls -l /etc/cron.hourly
total 12
-rwxr-xr-x 1 root root 312 nov. 5 2017 0anacron
-rwxr-xr-x 1 root root 244 avril 24 22:24 purge-ram
-rwxr-xr-x 1 root root 352 nov. 11 2017 updatedb

Le dossier /etc/cron.hourly a été créé manuellement et il suffit d’y placer le fichier 0anacron ci-dessous pour assurer le fonctionnement

#!/bin/sh
#
# anacron’s cron script
#
# This script updates anacron time stamps. It is called through run-parts
# either by anacron itself or by cron.
#
# The script is called « 0anacron » to assure that it will be executed
# _before_ all other scripts.

test -x /usr/sbin/anacron || exit 0
anacron -u cron.hourly

Exemple d’une tâche créée pat mes soins

purge-ram
#!/bin/bash
#
#set -x
nb=$(</var/tmp/purge-ram.txt)
if [ "$nb" -lt "4" ]
then
 nb=$(($nb + 1)) && echo $nb>/var/tmp/purge-ram.txt
else
 echo 1 > /var/tmp/purge-ram.txt && free -mht && sync && echo 3 > /proc/sys/vm/drop_caches && free -mht
fi

Les tâches quotidiennes

ls -l /etc/cron.daily
total 64
-rwxr-xr-x 1 root root 311 nov. 5 2017 0anacron
-rwxr-xr-x 1 root root 314 juin 11 2017 aptitude
-rwxr-xr-x 1 root root 77 janv. 21 2015 apt-show-versions
-rwxr-xr-x 1 root root 355 oct. 17 2014 bsdmainutils
-rwxr-xr-x 1 root root 384 août 25 2016 cracklib-runtime
-rwxr-xr-x 1 root root 1176 oct. 21 2017 dpkg
-rwxr-xr-x 1 root root 4128 sept. 9 2017 exim4-base
lrwxrwxrwx 1 root root 37 mai 25 21:08 google-chrome -> /opt/google/chrome/cron/google-chrome
-rwxr-xr-x 1 root root 89 nov. 8 2014 logrotate
-rwxr-xr-x 1 root root 1065 déc. 13 2016 man-db
-rwxr-xr-x 1 root root 538 nov. 13 2016 mlocate
-rwxr-xr-x 1 root root 249 nov. 18 2015 passwd
-rwxr-xr-x 1 root root 3974 juin 30 2017 tmpreaper
-rwxr-xr-x 1 root root 427 juin 2 08:47 ze-journal
-rwxr-xr-x 1 root root 1075 juin 2 08:47 ze-perso-apt
-rwxr-xr-x 1 root root 552 juin 2 08:46 ze-test-kernel

Les tâches sont lancées par ordre alphabétiques. Pour repérer celles de mon cru j’ai ajouté le préfixe ze.

Les tâches hebdomadaires

ls -l /etc/cron.weekly
total 8
-rwxr-xr-x 1 root root 312 déc. 28 2014 0anacron
-rwxr-xr-x 1 root root 723 déc. 13 2016 man-db

Les tâches mensuelles

Y en pas pour le moment.

ls -l /etc/cron.monthly
total 4
-rwxr-xr-x 1 root root 313 déc. 28 2014 0anacron

Vérifications

Horodatage du lancement dans le dossier /var/spool/anacron

ls -l /var/spool/anacron
total 16
-rw------- 1 root root 9 juin 2 07:38 cron.daily
-rw------- 1 root root 9 juin 2 10:02 cron.hourly
-rw------- 1 root root 9 juin 2 07:14 cron.monthly
-rw------- 1 root root 9 mai 27 09:52 cron.weekly

Dans cet exemple on voit que le dernier lancement des tâches hebdomadaires à eu lieu le 27 mai à 09 H 52.

Déclencher manuellement

Pour un type de tâche, il suffit d’effacer le fichier d’horodatage correspondant et au démarrage suivant du PC les tâches correspondantes seront lancées.

Pour redéclencher manuellement tout le mécanisme sur un PC en service, utiliser la commande

anacron -f -n

Vérification dans le journal

journalctl -xb | grep -i cron

Exemple au premier démarrage du PC:

journalctl -xb | grep cron
juin 04 06:54:32 debian systemd[1]: Started Trigger anacron every hour.
-- Subject: L'unité (unit) anacron.timer a terminé son démarrage
-- L'unité (unit) anacron.timer a terminé son démarrage, avec le résultat RESULT.
juin 04 06:54:33 debian systemd[1]: Started Run anacron jobs.
-- Subject: L'unité (unit) anacron.service a terminé son démarrage
-- L'unité (unit) anacron.service a terminé son démarrage, avec le résultat RESULT.
juin 04 06:54:33 debian anacron[5564]: Anacron 2.3 started on 2018-06-04
juin 04 06:54:34 debian anacron[5564]: Will run job `cron.daily' in 5 min.
juin 04 06:54:34 debian anacron[5564]: Will run job `cron.hourly' in 50 min.
juin 04 06:54:34 debian anacron[5564]: Jobs will be executed sequentially
juin 04 06:59:33 debian anacron[5564]: Job `cron.daily' started
juin 04 06:59:33 debian anacron[11915]: Updated timestamp for job `cron.daily' to 2018-06-04
juin 04 07:35:04 debian anacron[5564]: Job `cron.daily' terminated (mailing output)

Le service anacron

/lib/systemd/system/anacron.service
[Unit]
Description=Run anacron jobs
After=time-sync.target
ConditionACPower=true
Documentation=man:anacron man:anacrontab

[Service]
ExecStart=/usr/sbin/anacron -dsq
IgnoreSIGPIPE=false

[Install]
WantedBy=multi-user.target

Remarquez la  ConditionACPower=true, le service ne sera lancé que si votre alimentation est branchée sur le secteur.

Modification pour lancer quelque soit l’alimentation

sudo mkdir /etc/systemd/system/anacron.service.d

Dans le dossier /etc/systemd/system/anacron.service.d créer le fichier on-ac.conf avec le contenu suivant:

[Unit]
ConditionACPower=

Recharger et relancer le service

sudo systemctl daemon-reload

sudo systemctl stop anacron.service

sudo systemctl start anacron.service

Vérification

sudo systemctl status anacron.service
● anacron.service - Run anacron jobs
     Loaded: loaded (/lib/systemd/system/anacron.service; enabled; vendor preset: enabled)
    Drop-In: /etc/systemd/system/anacron.service.d
             └─on-ac.conf
     Active: active (running) since Wed 2020-01-29 21:03:06 CET; 4s ago
TriggeredBy: ● anacron.timer
       Docs: man:anacron
             man:anacrontab
   Main PID: 8144 (anacron)
      Tasks: 1 (limit: 4278)
     Memory: 360.0K
     CGroup: /system.slice/anacron.service
             └─8144 /usr/sbin/anacron -d -q -s

janv. 29 21:03:06 debian systemd[1]: Started Run anacron jobs.
janv. 29 21:03:06 debian anacron[8144]: Anacron 2.3 started on 2020-01-29
janv. 29 21:03:06 debian anacron[8144]: Will run job `cron.hourly' in 40 min.
janv. 29 21:03:06 debian anacron[8144]: Jobs will be executed sequentially

Par Bidouille De Bian

Bidouilleur sur Linux Debian 10 (Buster). Débutant dans le blog sur Wordpress.

2 commentaires

Les commentaires sont désactivés.