我有一份sudo crontab -e
四月份设立的工作条目,后来我忘记了:
0 0 1 * * /bin/journalctl --vacuum-size=200M
journalctl
它的作用是每月减少文件的大小,使它们的大小只有 200 MB(或大约)。
我遵循了以下说明:
- https://serverfault.com/questions/87472/how-to-create-a-cron-job-that-runs-on-the-first-day-of-month
但是,我直到 2019 年 1 月 1 日才收到以下电子邮件,说该作业终于运行了。我不记得在 2018 年 4 月设置作业后收到过电子邮件。为什么这个月度作业只在除夕运行?:
(...剪切...)
最后显示释放了 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 日运行:
希望 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。