今天遇到一个系统时间偏量达到阈值,zabbix平台告警时间偏移问题,排查后发现是系统配置在crontab定时任务的定时同步服务器时间的任务一直没有执行成功。
1.问题是这样今天一台应用服务器告时间偏移告警,登录服务器查看时区一切正常,就是时间比北京时间慢了2分钟,
2.发现问题后首先为了不影响业务第一时间手动同步了一下时间,ntpdate x.x.x.x
3.开始排查为什么时间会慢了呢,了解了一下我这个应用对时间要求不是特别敏感所以,在同步时间这边没有使用ntpd 服务,使用的是 ntpdate + crontab 方式来完成同步的
4.起初查看crontab日志发现定时任务是按时执行的;
5.经过分析认为是定时任务执行了,但是ntpdate没有执行,那么这是为什么呢?
答:来仔细查看后发行我的crontab 写的是 * * 1 * * ntpdate x.x.x.x 这个xxxx表示IP地址,
然后我默默的改成了 * * 1 * * /usr/sbin/ntpdate x.x.x.x 随即观察发现执行成功到此问题解决。
6.总结经验,那么这是为什么呢?
通过查找相关文献了解到,linux crontab 加载的环境变量,和我们正常登录shell 时加载的环境变量是不同的,也就是说是少的,那么解决这个问题其实就可以用两种方式来解决了,一,加环境变量,二,使用绝对路径。
还有就是,以后写脚本时要想放到crontab自动执行,知道应该怎么做了吧