J'utilise donc Anacron pour pouvoir exécuter de manière fiable certains scripts quotidiennement. Cependant, cela ne fonctionne pas quand Anacron lui-même ne démarre pas au démarrage la moitié du temps. Comment pourrais-je obtenir Anacron pour démarrer de manière fiable?
> grep 'anacron' /var/log/syslog.2
May 18 19:09:02 s-laptop anacron[2480]: Job `cron.daily' terminated (exit status: 1) (mailing output)
May 18 19:09:02 s-laptop anacron[2480]: Can't find sendmail at /usr/sbin/sendmail, not mailing output
May 18 19:09:02 s-laptop anacron[2480]: anacron: Can't find sendmail at /usr/sbin/sendmail, not mailing output
May 18 19:09:02 s-laptop anacron[2480]: Normal exit (1 job run)
May 18 21:20:48 s-laptop systemd[1]: Started Run anacron jobs at resume.
May 20 16:30:46 s-laptop systemd[1]: Started Run anacron jobs at resume.
May 20 17:02:27 s-laptop systemd[1]: Started Run anacron jobs at resume.
May 20 18:58:50 s-laptop systemd[1]: Started Run anacron jobs at resume.
May 20 19:13:48 s-laptop systemd[1]: Started Run anacron jobs.
May 20 19:13:48 s-laptop anacron[734]: Anacron 2.3 started on 2017-05-20
May 20 19:13:48 s-laptop anacron[734]: Will run job `cron.daily' in 5 min.
May 20 19:13:48 s-laptop anacron[734]: Will run job `cron.weekly' in 10 min.
May 20 19:13:48 s-laptop anacron[734]: Jobs will be executed sequentially
May 20 19:18:51 s-laptop anacron[734]: Job `cron.daily' started
May 20 19:18:51 s-laptop anacron[2367]: Updated timestamp for job `cron.daily' to 2017-05-20
> grep 'anacron' /var/log/syslog.1
May 20 19:18:54 s-laptop anacron[734]: Job `cron.daily' terminated (exit status: 1) (mailing output)
May 20 19:23:48 s-laptop anacron[734]: Job `cron.weekly' started
May 20 19:23:48 s-laptop anacron[2606]: Updated timestamp for job `cron.weekly' to 2017-05-20
May 20 19:30:09 s-laptop anacron[734]: Job `cron.weekly' terminated
May 20 19:30:09 s-laptop anacron[734]: Normal exit (2 jobs run)
May 21 10:02:56 s-laptop systemd[1]: Started Run anacron jobs at resume.
May 25 12:53:39 s-laptop systemd[1]: Started Run anacron jobs at resume.
Jun 1 18:09:14 s-laptop systemd[1]: Started Run anacron jobs at resume.
Jun 3 12:29:40 s-laptop anacron[751]: Anacron 2.3 started on 2017-06-03
Jun 3 12:29:40 s-laptop anacron[751]: Will run job `cron.daily' in 5 min.
Jun 3 12:29:40 s-laptop anacron[751]: Will run job `cron.weekly' in 10 min.
Jun 3 12:29:40 s-laptop systemd[1]: Started Run anacron jobs.
Jun 3 12:29:40 s-laptop anacron[751]: Will run job `cron.monthly' in 15 min.
Jun 3 12:29:40 s-laptop anacron[751]: Jobs will be executed sequentially
Jun 3 12:34:40 s-laptop anacron[751]: Job `cron.daily' started
Jun 3 12:34:40 s-laptop anacron[2243]: Updated timestamp for job `cron.daily' to 2017-06-03
> grep 'anacron' /var/log/syslog
Jun 3 12:34:44 s-laptop anacron[751]: Job `cron.daily' terminated (mailing output)
Comme on peut le voir dans le syslog, Anacron n'a été lancé qu'au démarrage les 20 mai et 3 juin, malgré le démarrage de la machine les 21 et 25 mai et le 1er juin.
De plus, aujourd’hui (3 juin), j’ai démarré mon ordinateur à 12h11 et, voyant que Anacron n’avait pas encore démarré et qu'aucun de mes travaux n’était exécuté, j’ai redémarré la machine à 12h29. Vous pouvez voir sur ce deuxième démarrage, Anacron a décidé de démarrer. Pourquoi ne démarre-t-il pas souvent?
Edit: Cela semble avoir été corrigé en amont dans Debian 10 et Ubuntu 19.04.
Ainsi, il semble qu'Anacron ne fonctionne pas au démarrage s'il est alimenté par batterie et qu'il ne devrait fonctionner qu'à 7h30, sinon. La solution pour moi était de configurer Anacron pour qu'il fonctionne lorsque le courant est branché.
Cela peut être fait en ajoutant un script comme celui-ci:
#!/bin/sh
test -x /etc/init.d/anacron && /usr/sbin/invoke-rc.d anacron start >/dev/null
Je l'ai enregistré dans /etc/pm/power.d/10_anacron
(assurez-vous qu'il est exécutable), qui s'exécutera automatiquement sur les systèmes plus anciens lorsqu'il est branché. Sur les versions actuelles d'Ubuntu, vous devez ajouter une règle udev pour exécuter le script. Il suffit de sauvegarder:
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/etc/pm/power.d/10_anacron"
à /etc/udev/rules.d/anacron.rules
.
Un moyen plus simple: il suffit de modifier une ligne du fichier /etc/default/anacron
en:
ANACRON_RUN_ON_BATTERY_POWER=yes