目 录CONTENT

文章目录

cron以本地时间运行还是UTC时间?

过客
2026-01-16 / 0 评论 / 1 点赞 / 3 阅读 / 0 字

在Linux中使用cron 定时任务BorgBackup做增量备份时,本来设定的是零晨2点的配置。

0 2 * * 1 /data/backup/borg/backup.sh >> /var/log/borg-backup-cron.log 2>&1

然后今天发现10点多了备份还在跑,还以为出什么bug了,8个小时都还没备份完呢,结果一看,发现系统时间不对,明明开了时间同步,怎么出这么大的差别呢。仔细看看,发现备份的Linux服务器用的是UTC格林时间。

大多数 Linux 发行版(如 Ubuntu、CentOS 等)使用的 cron 守护进程(如 cronievixie-cron)默认会按照 系统设置的时区(即 ​/etc/localtime ​指向的时区) 来解释 crontab 中的时间。

例如:

  • 如果你的系统时区是 Asia/Shanghai(UTC+8),那么你在 crontab 中写的 0 2 * * 1 就会在每周一 北京时间凌晨 2点 执行。
  • 但部分系统(如:使用 cronie 的发行版)支持可以为单个crontab设置时区。可以在 crontab 文件顶部通过 CRON_TZ 变量指定时区:CRON\_TZ=UTC

好了,对于这个问题,我们只要将系统时区设置回北京时间就好了。

    1. 列出所有可用时区
timedatectl list-timezones | grep -i shanghai
    1. 设置时区为北京时间
timedatectl set-timezone Asia/Shanghai
    1. 验证设置
timedatectl
date

1

评论区