在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 守护进程(如 cronie 或 vixie-cron)默认会按照 系统设置的时区(即 /etc/localtime 指向的时区) 来解释 crontab 中的时间。
例如:
- 如果你的系统时区是
Asia/Shanghai(UTC+8),那么你在 crontab 中写的0 2 * * 1就会在每周一 北京时间凌晨 2点 执行。 - 但部分系统(如:使用
cronie的发行版)支持可以为单个crontab设置时区。可以在 crontab 文件顶部通过CRON_TZ变量指定时区:CRON\_TZ=UTC
好了,对于这个问题,我们只要将系统时区设置回北京时间就好了。
-
- 列出所有可用时区
timedatectl list-timezones | grep -i shanghai
-
- 设置时区为北京时间
timedatectl set-timezone Asia/Shanghai
-
- 验证设置
timedatectl
date

评论区