最近在centos6.9系统遇到个定时任务(crontab)和系统日志时间与系统时间不一致的问题;
问题描述
在查看现网数据库备份文件是发现,备份文件的生成时间与备份脚本中date命令的时间不一致,脚本在crontab执行时,date命令输出的时间比系统时间完了8小时。
备份文件时间截图如图:文件的生成时间为2018-12-21 02:12,但是压缩包的时间为2018-12-20
备份脚本中压缩命令为:tar czf ./gw_data_center_`date '+%m-%d-%Y_%H-%M-%S'`.sql.tar.gz ./gw_data_center.sql
查看本地时间查看问题
写个简单脚本(testDate.sh)
[root@lypt-storage1 zhufei]# cat testDate.sh
#!/bin/bash
echo `date -R` >> 2.log
export TZ='Asia/Shanghai'
echo "`date '+%m-%d-%Y_%H-%M-%S'`" >> 1.log
测试时间脚本在crontab中执行,发现在crontab执行下结果为
[root@lypt-storage1 zhufei]# cat 2.log
Wed, 26 Dec 2018 05:51:01 +0000
直接在控制台执行
[root@lypt-storage1 zhufei]# date -R
Wed, 26 Dec 2018 13:51:01 +0800
可以看到手动执行的结果时间正常,但是crontab执行date的结果晚了8小时。
问题升级
重启crond、rsyslog后,crontab任务不能按照时间点执行,且系统日志时间也晚了8小时。
问题解决
在执行cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime、export TZ='Asia/Shanghai'之后问题都未能解决。
回到刚才的testDate.sh脚本,发现在export TZ='Asia/Shanghai'后date -R的执行结果时间与系统时间一致,且时区变为了东八区。
那么,在/etc/init.d/crond和/etc/init.d/rsyslog中加入export TZ='Asia/Shanghai'后能否成功呢?
结果:加入后重启crond和rsyslog,问题得到了解决。
疑问
其实,问题得到了解决,但是本质并没有得到解决:
1)、明明在~/.bashrc和/etc/profile中都已经配置了export TZ='Asia/Shanghai',为什么没有生效?
2)、hwclock --showtime与系统时间一致, hwclock --showtime(硬件真正时间)也比系统时间满了8小时,难道crontab和rsyslog是取得硬件时间?------->通过其他主机查看,取得并不是硬件时间。
3)、难道是centos6.9的影响?可能这个原因影响比较大
总结:通过/etc/init.d/server_name来定义环境变量是之后解决单独问题的一个方法。
网友评论