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

如何配置crontab适配夏令时,保证按英国当地固定时间执行任务?

可行解决方案

以下三种方案均可实现按英国当地时间(GMT/BST自动切换)执行定时任务,可根据你的实际场景选择:

方案1:crontab单独指定任务时区(最推荐)

Ubuntu默认的vixie cron支持在crontab中为任务单独指定时区,无需修改服务器全局时区,也不会影响其他UTC时区调度的任务。
操作方式:在目标任务的crontab条目前添加TZ=Europe/London声明即可,cron会自动按照该时区的时间计算执行时机,自动适配夏令时/冬令时切换。
示例配置:

# m  h dom mon dow   user   command
# 适配英国时区的每月1号00:00执行任务
TZ=Europe/London
0  0   1   *   *   root   cd / && run-parts --report /etc/cron.monthly

# 适配英国时区的每天16:00执行内容更新任务
TZ=Europe/London
0 16 * * * root /path/to/your/content/update/script.sh

方案2:脚本内置时区判断(兼容性最强)

如果使用的cron版本不支持自定义TZ变量,可以用「提前触发+脚本内时间校验」的方式实现:

  1. crontab设置两个触发时间,覆盖冬令时/夏令时对应的UTC时间点,比如要实现英国当地00:00执行,对应UTC时间为23:00(夏令时)和00:00(冬令时),crontab配置如下:
# m  h dom mon dow   user   command
0 23,0  1   *   *   root   /path/to/wrapped/script.sh
  1. 封装执行脚本,在脚本开头添加时区校验逻辑,只有当前英国时间确实为目标时间时才执行实际任务:
#!/bin/bash
# 校验英国当地时间是否为目标00:00
if [ "$(TZ='Europe/London' date +%H:%M)" != "00:00" ]; then
    exit 0
fi
# 下方写实际的任务逻辑
cd / && run-parts --report /etc/cron.monthly

方案3:修改服务器全局时区

如果服务器上大部分任务都需要按英国时区调度,可直接修改系统全局时区:

  1. 执行命令修改时区:sudo timedatectl set-timezone Europe/London
  2. 验证时区修改生效后,原有crontab规则不需要额外调整,就会自动按英国当地时间执行。
    注意:如果有其他依赖UTC时区运行的任务,需要为这些任务单独添加TZ=UTC的crontab声明,避免原有任务执行时间偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:39:00