我在新加坡,服务器(Ubuntu 22.04 EC2 实例)是根据我的本地时区(UTC+8H)设置的,至少命令是这么date
告诉我的。
$ date
Wed Sep 20 09:07:42 +08 2023
这是否能证明我的时区设置是本地的?不幸的是,我的@daily
cronjobs 每天在当地时间上午 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/Singapore
,systemctl 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,而不会计划任务本身,见上文。
这定义了作业要使用的“本地”时区。这可能对作业的任何操作都有帮助。诸如日志消息格式、命令date
或Python 日期时间.时区对象可能使用“本地”时区。