Вопрос Как сделать запуск Anacron надежным?


Итак, я использую Anacron для надежного запуска некоторых скриптов ежедневно. Однако это не работает, когда Anacron сам не запускается при загрузке в течение половины времени. Как я могу заставить Anacron надежно запустить?

> 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)

Как видно из syslog, Anacron запускался только при загрузке 20 мая и 3 июня, несмотря на то, что машина была загружена 21 и 25 мая и 1 июня.

Кроме того, сегодня (3 июня), я фактически загрузил свой компьютер в 12:11, и, увидев, что Anacron не запустился, и ни одна из моих заданий не была запущена, я перезагрузил машину в 12:29. Вы можете увидеть эту вторую загрузку, Anacron решил запустить. Почему это просто не запускается много времени?


2
2018-06-03 12:03


происхождения


Anacron не имеет функции «просто начать», иногда в случайном порядке. После того, как пара перезагрузится, мой Anacron начинает надежно надеяться на мою тестовую систему. Можете ли вы предложить какие-либо изменения, которые я могу внести в свою тестовую систему, которые позволят мне дублировать вашу проблему? - user535733
Хорошо, просто начал смотреть скрипты init, и я думаю, что понимаю, почему. Anacron не должен был запускаться, потому что у меня было питание от батареи. Глядя на записи cron для анакрона, в следующий раз, когда анакрон будет запущен, будет 7:30 утра. Это верно? Кажется немного странным, что что-то, что призвано сделать cron более надежным, полностью пропустит все, если оно не будет вставлено при загрузке и выключено в 7:30 утра. Итак, приемлемо ли это решение, чтобы изменить запись cron каждый час, или это может вызвать проблемы? Или, еще лучше, запустить анакрон каждый раз, когда машина подключена? - Sam Bull
Подожди. Anacron НЕ всегда включен (daemon / service). Это небольшая прокладка программы, которая запускается при запуске / возобновлении, проверяет файлы timestamp, чтобы увидеть, были ли пропущены задания cron, запускает ли они их, если это необходимо, и завершает работу. Ваши журналы, похоже, указывают на то, что Anacron Бежал, и просто решил, что рабочие места не нужно запускать. Прежде чем углубиться в отладку Anacron, сначала сравните запланированные и фактические времена для cron.daily и cron.weekly. Ответ может быть таким же простым, как перенос вашего cron.daily графика на предыдущий день. - user535733
Нет сообщения о запуске anacron и ничего о запуске cron.daily за 05/21, 05/25, 06/01 или в первый раз, когда я загрузил свой компьютер 06/03 в 12:11. Он не запускал мои cron.daily скрипты в любое время между 05/13 и 06/03. Несмотря на то, что мой компьютер несколько раз включался и включался в течение нескольких часов. Мне кажется, что сценарий init отвечает за запуск Anacron при загрузке, но не запускает его, если на батарее (/etc/init.d/anacron). И единственный раз, когда я вижу, что он запускается в 7:30 утра в /etc/cron.d/anacron. - Sam Bull
Я также просто попробовал добавить правило udev для запуска anacron при подключении. Кажется, он работает правильно, поэтому я думаю, что это может быть правильное исправление. - Sam Bull


ответы:


Таким образом, кажется, что Anacron не запускается при запуске, если он работает от батареи, и в противном случае он запланирован только на 7:30. Решение для меня состояло в том, чтобы настроить Anacron для запуска при включении питания.

Это можно сделать, добавив скрипт следующим образом:

#!/bin/sh
test -x /etc/init.d/anacron && /usr/sbin/invoke-rc.d anacron start >/dev/null

Я сохранил его в /etc/pm/power.d/10_anacron (убедитесь, что он является исполняемым), который в старых системах запускается автоматически при подключении. В текущих версиях Ubuntu вам нужно добавить правило udev для запуска скрипта. Просто сохраните:

SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/etc/pm/power.d/10_anacron"

в /etc/udev/rules.d/anacron.rules,


4
2018-06-05 17:27





Самый простой способ: просто изменить строку в файле /etc/default/anacron чтобы:

ANACRON_RUN_ON_BATTERY_POWER=yes

1
2017-08-27 10:19



Это может привести к тому, что он будет работать от батареи и отработанной энергии, именно поэтому в первую очередь не установлен. Это зависит от того, является ли надежность или батарея более важной проблемой для вас. Решение, которое я использую, не влияет на срок службы батареи, но значительно повышает надежность настройки по умолчанию. - Sam Bull
Ах, теперь у меня есть твоя проблема! В этом случае ваше решение лучше. Но, возможно, вы должны отредактировать свой вопрос, чтобы люди могли сразу увидеть, что речь идет только о запуске anacron, когда ноутбук подключен. - mzuther
Ну, проблема в том, что он почти не работал. Благодаря дальнейшему копанию я понял, что проблема вызвана тем, что она работает только при загрузке (и пропускается, если включена батарея). Итак, мое решение означает, что в настоящее время он работает в большинстве случаев, когда я использую свой ноутбук, а до того, как он работает только один раз в месяц. - Sam Bull
Это изменение не работает на Ubuntu 16.04 - NicolasSmith