首页/系统/Linux 运维命令速查/cron 时区:CRON_TZ 变量
定时任务与计划50 条

cron 时区:CRON_TZ 变量

业务跨时区时用 CRON_TZ 指定该任务表的时区(cronie 及多数现代实现支持);系统时区用 timedatectl 统一管理更稳。

Linux 运维命令速查系统更新于 2026-10-13

cron 的时区变量 CRON_TZ

业务跨时区时,可以在任务表里用 CRON_TZ 指定该表的时区,让任务按目标时区而不是系统时区执行。cronie 及多数现代实现支持这个变量,个别老版本会把它当成普通变量忽略。系统级时区统一交给 timedatectl 管理更稳,跨时区业务则建议在任务表里显式声明。

基本信息

用途避免跨时区场景下执行时间错位
写法CRON_TZ=Asia/Shanghai 写在任务行之前
系统级做法timedatectl set-timezone 设置整机时区
兼容性个别老版本 cron 会忽略该变量

典型使用场景

  • 业务面向海外用户,需要按当地时间触发任务
  • 报表按客户所在时区生成
  • 多机房系统时区不统一但任务时刻要求一致
  • 促销或活动按特定时区的整点触发
  • 排查任务提前或推迟执行的时区因素
  • 评估夏令时地区的时间处理边界

示例与校验

示例与校验
# 按上海时间每天 08:00 执行,不受系统时区影响
CRON_TZ=Asia/Shanghai
0 8 * * * /opt/app/greet.sh

timedatectl | grep -i 'time zone'    # 查看系统时区
timedatectl list-timezones | grep -i shanghai   # 校验时区名是否有效
date                                 # 确认当前系统时间与时区
journalctl -u crond --since today | tail -20   # 看任务实际触发时刻

时区相关项

项作用注意点
CRON_TZ指定该任务表的时区写在任务行之前,作用于其后的行
系统时区整机默认时间参考用 timedatectl 统一管理
时区名如 Asia/Shanghai必须是系统识别的标准名称
夏令时切换时可能出现跳过或重复小时金融类任务需评估影响
日志时间按系统时区记录对账时必须换算
个别老版本 cron 不识别 CRON_TZ,会把它当普通环境变量忽略:关键任务上线前要做一次跨时区验证,不能只看配置写了什么。
系统时区与业务时区混用,最容易导致任务提前或推迟若干小时;评审时用 date 输出与日志时间双向核对。
夏令时切换地区会出现某个小时被跳过或重复,依赖整点触发的任务要考虑这种边界,必要时避开切换日的特定时刻。

易错点

  • 依赖老版本 cron 的 CRON_TZ:变量被忽略,任务按系统时区执行且无人察觉
  • 系统时区与业务时区分不清:任务时间整体偏移,排查方向完全跑偏
  • 不校验时区名:写错的名字不生效,或产生意外结果
  • 忽略夏令时边界:切换日出现任务漏跑或重复执行

数据来源与参考

  • man 5 crontab(cronie CRON_TZ)
  • man 1 timedatectl

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌