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

UTC系统时区下CRON_TZ指定时区定时任务失效问题求助

UTC系统时区下Crontab指定时区任务不触发的解决办法

核心排查与修复步骤

  • 先确认cron版本是否支持CRON_TZ
    不是所有cron实现都兼容CRON_TZ,比如老系统的vixie-cron就不支持,只有cronie(现代Linux主流版本)才认可这个变量。查询版本的命令:

    cron -V
    

    如果是vixie-cron,直接放弃CRON_TZ方案,改用后面的UTC时间换算方法;如果是cronie,继续排查配置细节。

  • 检查CRON_TZ的位置和语法
    CRON_TZ必须放在crontab的最顶部,所有任务条目之前,格式不能出错。正确配置示例:

    CRON_TZ=Europe/Lisbon
    22 17 * * * /full/path/to/your/task.sh
    

    不要把变量插在任务中间,也不要添加多余空格或引号。

  • 手动验证时区转换逻辑
    系统是UTC时区,先确认里斯本时间与UTC的偏移量:

    TZ=Europe/Lisbon date +"%H:%M %z"
    

    夏令时会显示UTC+1,冬令时则是UTC+0。算出里斯本17:22对应的UTC时间后,手动在该时间点检查任务是否触发,或者临时把任务改成1分钟后执行,快速验证配置有效性。

  • 替代方案:直接用UTC时间配置任务
    如果CRON_TZ确实无法生效,直接换算目标时区对应的UTC时间来写crontab。比如里斯本夏令时17:22对应UTC16:22,冬令时对应UTC17:22,把任务时间改成对应的UTC值即可——缺点是夏令时变更时需要手动调整任务,但适合不支持CRON_TZ的环境。

  • 查看cron日志定位问题
    检查cron日志文件(通常是/var/log/cron或/var/log/syslog),搜索任务脚本名称,查看是否有执行记录或报错信息:

    grep "your_task.sh" /var/log/cron
    

    注意日志时间是系统UTC时区,需要转换成里斯本时间来确认是否匹配触发时间点。

额外必查项

  • 确保cron服务正常运行:
    systemctl status crond
    
    若未运行,启动并设置开机自启:
    systemctl start crond
    systemctl enable crond
    
  • 任务脚本必须具备执行权限,且配置时使用绝对路径,避免因权限不足或路径错误导致任务执行失败,看起来像未触发。

内容的提问来源于stack exchange,提问作者Andre Garcia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:41:07