为什么 Cronjobs 按照 UTC 时间运行?

为什么 Cronjobs 按照 UTC 时间运行?

我在新加坡,服务器(Ubuntu 22.04 EC2 实例)是根据我的本地时区(UTC+8H)设置的,至少命令是这么date告诉我的。

$ date
Wed Sep 20 09:07:42 +08 2023

这是否能证明我的时区设置是本地的?不幸的是,我的@dailycronjobs 每天在当地时间上午 8 点运行,这表明 cron 守护进程遵循 UTC 时间。除了我在终端中看到的时区设置外,cron 守护进程是否还有单独的时区设置?这是我的 cron 命令。

@daily cd tensorflow_clustering/ && bash run_index.sh >> run.log

根据评论,

$ timedatectl
               Local time: Wed 2023-09-20 10:03:11 +08
           Universal time: Wed 2023-09-20 02:03:11 UTC
                 RTC time: Wed 2023-09-20 02:03:10
                Time zone: Asia/Singapore (+08, +0800)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

答案1

如果要更改作业的运行时间:

这里寻求一个系统范围的解决方案,从根本上/etc/timezone改变计划任务根据人 8 cron

如果你想保留系统时区,并且只更改它计划任务,您可以尝试输入TZ=Asia/Singaporesystemctl edit cron.service然后systemctl restart cron

这里这里寻找可能的每个工作解决方案。

如果您想要更改作业运行时的时区:

Cronjobs 尊重泰泽环境变量提供计划任务守护进程。计划任务守护进程允许在 crontabs 中设置环境变量。

这意味着你可以通过设置来影响 cronjobs 的时区泰泽在你的 crontabs 中,例如crontab -e

@daily echo "I run with UTC"

# This timezone will apply to all cronjobs after this line
TZ=Asia/Singapore

@daily echo "I run with Singapore time"

请注意设置泰泽在 crontabs 中只会影响 cronjobs,而不会计划任务本身,见上文。

这定义了作业要使用的“本地”时区。这可能对作业的任何操作都有帮助。诸如日志消息格式、命令datePython 日期时间.时区对象可能使用“本地”时区。

相关内容