根据本地时间而不是世界时间运行 Cronjobs

根据本地时间而不是世界时间运行 Cronjobs

跑步时

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=UTCTZ=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):

  1. cat /etc/timezone
  2. rm -fv /etc/localtime
  3. ln -s /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
  4. apt install -y --reinstall tzdata
  5. /etc/init.d/rsyslog restart
  6. tail -f /var/log/syslog
  7. cat /etc/timezone

相关内容