![为什么 cronjobs 在错误的时间运行?](https://linux22.com/image/538207/%E4%B8%BA%E4%BB%80%E4%B9%88%20cronjobs%20%E5%9C%A8%E9%94%99%E8%AF%AF%E7%9A%84%E6%97%B6%E9%97%B4%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我已经设置了 cronjobs,在我的 Ubuntu 服务器上每天运行。
例如 0 4 * * * 命令
它们正在运行,只是运行时间提前了 8 小时。设置服务器时,最初设置为 UTC 时间。我运行sudo dpkg-reconfigure tzdata
设置服务器为 CST,比 UTC 晚 6 小时。有趣的是,我使用的是 PST,比 UTC 晚 8 小时,但我不知道服务器如何知道这一点。
如果我运行该命令date
,它会显示 CST 中的时间。
肯定是某个地方的时间配置有误。我该去哪里解决这个问题?
答案1
更改时区后,您是否记得重新启动 cron?如果没有,cron 可能仍保留最初启动时的旧时区概念。
虽然不是绝对必要的,但我通常建议在更改时区后重新启动计算机——服务器的时区不应该改变(或至少应该改变)。非常不频繁),这样可以保证服务器上的每个程序都已重新启动,并且知道更改:-)
答案2
我发现,当我运行该 hwclock
命令时,时间与我运行命令时的时间相差一个小时date
。要解决这个问题,您可以调用hwclock --systohc
它将同步两个时间并在预期时间运行 cronjobs。
答案3
在 Ubuntu 20 上,使用以下命令重新启动 cron 守护程序:
sudo service cron restart
答案4
要验证此问题,您还可以查看 cron 日志,您会在 cron 日志中看到不需要的时间。当设置了时区但未重新启动 cron 服务时,就会遇到此问题。此外,您还应该重新启动 rsyslog 服务。
请发出此命令来解决此问题。
sudo systemctl restart crond
sudo systemctl restart rsyslog