修改Linux服务器时间测试crontab

最近在公司做的一个应用,有跟时间有关的逻辑,测试人员需要对这个逻辑进行测试,需要修改Linux服务器的时间,开始的时候,我们使用:

[root@web_test www]# date -s '2013-08-26 9:59'

来修改系统的时间,输入date之后也看到了时间确实被改了,于是我们在等待crontab自动执行10点钟的定时脚本,时间到了之后,我们查看脚本的输出日志,日志的时间或者是日志根本不存在,也就是说脚本根本就没有本执行(我们的脚本手动执行是不会有问题的)。为了排查问题,我们把crontab的中的脚本原来定在10点钟跑的改成了每分钟都会跑,结果是它成功执行了,那么这就说明我们的crontab本身是没有问题的,问题就出在系统时间上了!

查阅了相关的资料发现:在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS!这就是为什么我们的脚本不执行的问题的原因了。如果要确保修改生效要执行如下命令:

[root@web_test www]# clock -w

修改了系统时间之后再输入clock -w就可以将系统时间写入CMOS,然后我们的crontab定时脚本就跑起来了!

诶,等一下,那我们改了系统的时间怎么把系统的时间还原成现实中的时间呢?不要看着你的手表手动输入,要那种很准确的时间?

我们要做的就是寻找一个网络时间服务器,比如一些国家授时中心,我查了有这些:

微软公司授时主机(美国)
time.windows.com
台警大授时中心(台湾)
asia.pool.ntp.org
中科院授时中心(西安)
210.72.145.44
网通授时中心(北京)
219.158.14.130

我们只要运行:

[root@web_test www]# ntpdate asia.pool.ntp.org

然后再输入clock -w就手动将系统时间写入CMOS,就OK啦!

 

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/2069.html

《修改Linux服务器时间测试crontab》有2个想法

发表评论