Cron 每月任务使用 `0 0 1 * *` 随机运行

Cron 每月任务使用 `0 0 1 * *` 随机运行

我有一份sudo crontab -e四月份设立的工作条目,后来我忘记了:

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

journalctl它的作用是每月减少文件的大小,使它们的大小只有 200 MB(或大约)。

我遵循了以下说明:

但是,我直到 2019 年 1 月 1 日才收到以下电子邮件,说该作业终于运行了。我不记得在 2018 年 4 月设置作业后收到过电子邮件。为什么这个月度作业只在除夕运行?:

cron 每月 journalctl.png

(...剪切...)

cron 每月 journalctl end.png

最后显示释放了 1.2 GB 的空间。然而这意味着在除夕夜运行该作业之前,大约有 1 GB 的空间被浪费了。

答案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 作业于 2019 年 1 月 9 日设置,然后于 2019 年 1 月 30 日运行:

每月计划任务.png

希望 cron 作业能够按预期于 2019 年 2 月 1 日再次运行!


更新 2

该脚本/etc/cron.monthly/在2019年2月1日没有运行。深入挖掘后,我发现了这样的解释:

根据链接的解释我发现:

$ 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

现在 cron 认为上次monthly运行作业的时间是 2019 年 1 月 1 日。

重新启动并测试的时间...


更新 3

重启后,几乎立即发送了一封电子邮件:

Anacron <[email protected]>    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

相关内容