Задание Cron Monthly работает случайным образом, используя `0 0 1 * *`

У меня есть это sudo crontab -e Вступление в должность я настроил в апреле, потом забыл о:

0   0   1   *   *     /bin/journalctl --vacuum-size=200M

То, что он делает, это уменьшить размер journalctl файлы каждый месяц, поэтому они имеют размер только 200 МБ (или около того).

Я следовал этим инструкциям:

Однако я получил следующее электронное письмо 1 января 2019 года, в котором говорилось, что работа наконец-то запущена. Я не помню, чтобы получал по электронной почте письмо после начала работы в апреле 2018 года. Почему эта ежемесячная работа выполняется только в канун Нового года?:

(... СНиП...)

В самом конце написано, что было освобождено 1,2 ГБ. Однако это означает, что около 1 ГБ было потрачено впустую, пока работа не запустилась в канун Нового года.

1 ответ

Решение

Причина, по которой работа выполнялась только в канун Нового года, - все остальные первые дни месяца, когда машина была выключена в полночь.

Самый простой способ - не использовать sudo crontab -e а лучше создать скрипт bash в каталоге /etc/cron.monthly, Убедитесь, что имя файла сценария не содержит . в этом. Имена файлов, содержащие . такие как Monthly job.cron или же MonthlyUpdate.sh не побежит.

В этом случае используйте:

sudo -H gedit /etc/cron.monthly/journal_vacuum

Вставьте эти строки:

#!/bin/sh
#
# NAME: journal_vacuum
# DESC: Reduce size of system journals (journalctl) each month.
# DATE: January 9, 2019.

# NOTE: Replaces `0 0 1 * * /bin/journalctl --vacuum-size=200M` which
#       which only runs if machine is turned on at midnight.

/bin/journalctl --vacuum-size=200M

Сохраните файл и выйдите gedit, Сделайте скрипт исполняемым, используя:

sudo chmod a+x /etc/cron.monthly/journal_vacuum

Теперь при первом включении аппарат включается каждый месяц, будь то 1-го числа месяца в 7:00 или даже 2-го числа месяца. cron работа будет работать


Обновление 1

Один раз в месяц непредсказуемо. Задание cron было настроено 9 января 2019 года, а затем запущено 30 января 2019 года:

Надеемся, что работа cron снова начнется 1 февраля 2019 года, как и ожидалось!


Обновление 2

Сценарий в /etc/cron.monthly/ не бежал 1 февраля 2019 года. Копая глубже я нашел это объяснение:

После объяснения ссылки я обнаружил:

$ sudo cat /var/spool/anacron/cron.monthly
20190130

Поэтому с sudo полномочия, которые я использовал:

rick@alien:~$ sudo -i
root@alien:~# echo 20190101 > /var/spool/anacron/cron.monthly
root@alien:~# exit

Теперь Крон считает, что в прошлый раз monthly Задания были выполнены 1 января 2019 года.

Время перезагрузиться и проверить...


Обновление 3

После перезагрузки письмо было отправлено практически мгновенно:

Anacron <XxxxxXxxxx999@gmail.com>    7:45 AM (3 minutes ago)
to root, bcc: XxxxxXxxxx999

/etc/cron.monthly/journal_vacuum:
Vacuuming done, freed 0B of archived journals on disk.

Теперь мы можем видеть:

$ sudo cat /var/spool/anacron/cron.monthly
20190203

Последний шаг - заменить 20190203 с 20190201 используя технику в обновлении 2.

Другие вопросы по тегам