Задание Cron Monthly работает случайным образом, используя `0 0 1 * *`
У меня есть это sudo crontab -e
Вступление в должность я настроил в апреле, потом забыл о:
0 0 1 * * /bin/journalctl --vacuum-size=200M
То, что он делает, это уменьшить размер journalctl
файлы каждый месяц, поэтому они имеют размер только 200 МБ (или около того).
Я следовал этим инструкциям:
- https://serverfault.com/questions/87472/how-to-create-a-cron-job-that-runs-on-the-first-day-of-month
Однако я получил следующее электронное письмо 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.