![根据本地时间而不是世界时间运行 Cronjobs](https://linux22.com/image/1361751/%E6%A0%B9%E6%8D%AE%E6%9C%AC%E5%9C%B0%E6%97%B6%E9%97%B4%E8%80%8C%E4%B8%8D%E6%98%AF%E4%B8%96%E7%95%8C%E6%97%B6%E9%97%B4%E8%BF%90%E8%A1%8C%20Cronjobs.png)
跑步时
dpkg-reconfigure tzdata
在终端上,我的机器上有两个不同的时间
Local time is now: Wed May 1 11:58:55 IST 2013.
Universal Time is now: Wed May 1 06:28:55 UTC 2013.
问题是我想按照 IST 中的本地时间运行我的 cronjobs,但它们是按照世界时间 UTC 运行的。我需要在哪里进行必要的更改才能实现所需的行为?
答案1
Cron 在本地时间运行,但在某些系统上,您可以使用 TZ= 行使其在不同的时区运行某些行。其他系统不支持此功能。如果您有TZ=UTC
或TZ=GMT
行,请将其注释掉。如果没有,请尝试TZ=IST
在第一个条目之前单独添加一行。man crontab
如果您的系统支持,使用应该记录 TZ= 行。如果您指定时区,请注意夏令时问题。
如果 cron 确实以 UTC 运行,则有几种可能性,包括您的系统以 UTC 运行,或者 cron 以某种方式在将 TZ 环境变量设置为 UTC 的情况下启动。输入
date
查看系统所保持的时间。执行此操作时,请确保 shell 中未设置 TZ 变量(使用 检查printenv TZ
,它不应返回任何内容)。
做
ps auxwwe | grep cron | grep TZ
测试 cron 是否已设置 TZ。如果它未返回任何内容,则启动时未设置 TZ。如果已设置,则需要追溯启动过程以查看 TZ 的设置位置,从启动 cron 的脚本开始。
这里有更多关于 cron 和时区的信息:
https://askubuntu.com/questions/54364/how-do-you-set-the-timezone-for-crontab
--jh--
答案2
在我的 Amazon EC2 Linux 实例上,设置 TZ 变量只会改变程序通过 cron 启动后使用的时区,但不会改变 cron 启动它们的时间 - 它们仍然根据 UTC 时间启动。
为了让 cron 根据当地时间启动程序,我必须将其更改/etc/localtime
为适合我的时区的 tzfile 的符号链接,然后重新启动 cron 服务:
mv /etc/localtime /etc/localtime.bak
ln -s /usr/share/zoneinfo/America/Chicago /etc/localtime
service crond restart
更多信息请点击这里:https://www.freedesktop.org/software/systemd/man/localtime.html
答案3
在将系统更改为本地时区之前,我已将其配置为 UTC。
我发现更改系统时区后必须重新启动 cron。
答案4
刚刚在 Ubuntu 14/16 上解决了这个问题。对我来说非常完美。
步骤(隐含 sudo):
cat /etc/timezone
rm -fv /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
apt install -y --reinstall tzdata
/etc/init.d/rsyslog restart
tail -f /var/log/syslog
cat /etc/timezone