【问题描述】在CentOS 7.9系统上, 系统的时区为UTC, 我使用crontab命令设置定时任务
10 00 * * * bash ./main_3dayAgo.sh
那么main_3dayAgo.sh脚本应该在每天的00:10:00 UTC执行,但是我查看日志文件/var/log/cron的时候, 执行日志如下:
Feb 3 19:00:10 localhost CROND[17959]: (root) CMD (bash ./main_3dayAgo.sh)
“Feb 3 19:00:10”是前一天的19点,+5才是UTC时间, 才是正确的。现在的问题是: 系统的时区是UTC, 日志文件/var/log/cron中的时间戳为什么是UTC-5??
一、问题分析
- 系统时区设置:系统时区是UTC,但cron日志(/var/log/cron)显示的时间戳是另一个时区(可能是系统所在地的本地时间)
- 日志时间戳来源:/var/log/cron中的时间戳不是由cron服务自身生成的,而是由系统日志服务(rsyslog)在记录日志时添加的当前时间
- 根本原因:系统日志服务(rsyslog)使用的时区可能与系统时区不一致,或者系统时区设置本身有问题。
二、解决方案
1.检查系统当前时区设置
# 查看当前系统时区
timedatectl status
# 查看当前时间
date
# 查看时区符号链接
ls -l /etc/localtime

2.确保系统时区正确设置为UTC
# 如果当前不是UTC,设置为UTC
sudo timedatectl set-timezone UTC
# 或者通过符号链接设置
sudo rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/UTC /etc/localtime
3.检查系统日志服务(rsyslog)的时区设置
重新设置时区以后,不但要重启crontab服务,也要重启系统日志服务(rsyslog)
# 重启rsyslog服务使时区生效(Centos)
sudo systemctl restart rsyslog
# 重启crond服务(Centos)
sudo systemctl restart crond
4. 验证修改结果
4.1 检查crontab定时任务和日志
重启crontab和rsyslog这两个服务以后,设置一个一分钟执行一次的定时任务,检查日志文件/var/log/cron,其中的时间戳是预期的UTC吗?
#每隔1分钟执行一次
*/1 * * * * echo "sucy check crontab task"
查看新的cron日志的时间戳:
# 动态监控cron日志的更新
tail -f /var/log/cron
从末尾查看
tail -n 300 /var/log/cron

当前北京时间10点,=UTC + 8h,符合预期。
4.2 快速检查时区的一致性
# 检查各个组件时区
echo "系统时区: $(timedatectl | grep "Time zone")"
echo "当前时间: $(date)"
echo "日志测试: $(logger -t TEST "Timezone in rsyslog" && tail -1 /var/log/messages)"


1万+

被折叠的 条评论
为什么被折叠?



