CentOS 7.9系统上使用crontab设置定时任务,未按照设定的时间执行,是时区设置的问题

【问题描述】在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??

一、问题分析

  1. 系统时区设置:系统时区是UTC,但cron日志(/var/log/cron)显示的时间戳是另一个时区(可能是系统所在地的本地时间)
  2. 日志时间戳来源:/var/log/cron中的时间戳不是由cron服务自身生成的,而是由系统日志服务(rsyslog)在记录日志时添加的当前时间
  3. 根本原因:系统日志服务(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)"

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包

      打赏作者

      爱刷碗的苏泓舒

      你的鼓励将是我创作的最大动力

      ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
      扫码支付:¥1
      获取中
      扫码支付

      您的余额不足,请更换扫码支付或充值

      打赏作者

      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值