You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Cron任务按UTC时间运行?新加坡时区Ubuntu 22.04 EC2实例的配置疑问

为何Cron任务按UTC时间运行?新加坡时区Ubuntu 22.04 EC2实例的配置疑问

嗨,我来帮你捋清楚这个问题!从你给出的date和timedatectl输出来看,系统层面的时区确实已经正确设置为**Asia/Singapore(UTC+8)**了,但cron任务却表现出遵循UTC时间的行为——@daily任务在本地8点运行,而UTC的0点正好对应新加坡时间8点,这说明cron daemon确实在使用UTC时区,和系统时区不一致。

下面给你分析原因和解决办法:

1. Cron为何会用独立时区?

cron理论上应该继承系统的时区设置,但在某些情况下(比如cron启动时没有正确加载时区环境变量、/etc/localtime链接异常,或者配置文件里手动指定了UTC),它会 fallback 到UTC运行。

2. 排查步骤

  • 检查cron的时区环境变量:
    运行这个命令查看cron进程的环境变量,确认TZ值:

    cat /proc/$(pidof cron)/environ | tr '\0' '\n' | grep TZ
    

    如果输出是空的或者显示TZ=UTC,那就是问题所在。

  • 验证系统时区配置文件:
    确认/etc/timezone文件内容是Asia/Singapore,同时/etc/localtime是指向/usr/share/zoneinfo/Asia/Singapore的软链接:

    cat /etc/timezone
    ls -l /etc/localtime
    

3. 解决办法

  • 给单个cron任务指定时区:
    最简单的方式是直接在你的crontab任务前加上时区声明,这样不管cron daemon用什么时区,这个任务都会按指定时区运行:

    TZ=Asia/Singapore @daily cd tensorflow_clustering/ && bash run_index.sh >> run.log
    
  • 修复cron daemon的时区设置:
    如果想让所有cron任务都遵循系统时区,先确保/etc/timezone和/etc/localtime配置正确,然后重启cron服务:

    sudo systemctl restart cron
    

    重启后再用之前的命令检查cron的TZ环境变量,应该会显示Asia/Singapore了。

  • 检查全局crontab配置:
    查看/etc/crontab文件开头有没有手动设置TZ=UTC,如果有的话改成TZ=Asia/Singapore,然后重启cron。

备注:内容来源于stack exchange,提问作者Della

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:07:57