按照本地时间而不是世界时间运行 Cronjobs

9 cron ubuntu-server crontab ubuntu-12.04

正在运行

dpkg-reconfigure tzdata

在终端中,我在我的机器上有 2 个不同的时间

Local time is now:      Wed May  1 11:58:55 IST 2013.
Universal Time is now:  Wed May  1 06:28:55 UTC 2013.
Run Code Online (Sandbox Code Playgroud)

问题是我想按照 IST 中的本地时间运行我的 cronjobs,但它们按照世界标准时间 UTC 运行。我需要在哪里进行必要的更改才能实现所需的行为?

小智 11

Cron 在本地时间运行,但您可以在某些系统上使用 TZ= 行使其在不同时区运行某些行。其他系统不支持这一点。如果您有TZ=UTCTZ=GMT行,请将其注释掉。如果不这样做,请尝试TZ=IST 在第一次输入之前单独添加一行。man crontab如果您的系统支持,使用应该记录 TZ= 行。如果您指定时区,请注意夏令时问题。

如果 cron 确实在 UTC 中运行,那么有几种可能性,包括您的系统在 UTC 中运行,或者 cron 以某种方式开始时将 TZ 环境变量设置为 UTC。类型

date
Run Code Online (Sandbox Code Playgroud)

看看你的系统保持什么时间。执行此操作时,请确保未在您的 shell 中设置 TZ 变量(请检查printenv TZ,它不应返回任何内容)。

ps auxwwe | grep cron | grep TZ
Run Code Online (Sandbox Code Playgroud)

测试 cron 开始使用 TZ 集。如果不返回任何内容,则说明启动时未设置 TZ。如果已设置,则需要追溯启动过程以查看 TZ 设置的位置,从启动 cron 的脚本开始。

这里有更多关于 cron 和时区的信息:

https://askubuntu.com/questions/54364/how-do-you-set-the-timezone-for-crontab

--jh--


Rus*_*l G 5

在我的 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
Run Code Online (Sandbox Code Playgroud)

更多信息在这里:https : //www.freedesktop.org/software/systemd/man/localtime.html

  • “CRON_TZ”适用于 Amazon Linux。因此,您将其添加到 cron 条目的顶部:`CRON_TZ="America/Chicago"`。运行“man 5 crontab”并搜索 TZ 以检查您的发行版是否支持“CRON_TZ”。 (2认同)