zoukankan      html  css  js  c++  java
  • linux 时间同步

    [转自

    qing_gee的专栏 :http://blog.csdn.net/qing_gee/article/details/42234997

    ]

    前言:在我们的项目中,需要同步Linux服务器的时间,于是用到了ntpdate命令,就在crontab中进行了配置,设置为每个小时的整时分钟进行同步,完了后就一直没有关注,因为这很简单,经验主义告诉我,既然手动使用ntpdate命令就可以同步时间成功,放在cron进程(是Linux的一个守护进程,如果启动后,会每隔一分钟去检查对应的crontab文件,root用户的在/var/spool/cron)中就更没有问题了,然而,今天看Linux服务器的时间后,发现和Windows时间差上了好几分钟,我们的Linux服务承载着期货交易平台的定时服务,比如说,9点半开盘等等,这就意味着时间不准确啊,于是就调查解决问题,有了下面的记录

    1.使用crontab -l命令查看定时服务
    [root@MyCloudServer xxx]# crontab -l
    0,10,20,30,40,50 * * * * ntpdate time.windows.com &>/xxx/ntpdate.log
    2.看起来好像没有问题啊,vim /var/spool/mail/root(定时服务日志会存放在该文件中)查看定时服务日志,发现有如下信息
    /bin/sh: ntpdate: command not found
    
    说明定时服务在/bin/sh目录中去找ntpdate命令,并且没有找到
    3.使用whereis ntpdate命令看看该命令在什么目录下
    [root@MyCloudServer cron]# whereis ntpdate
    ntpdate: /usr/sbin/ntpdate /usr/share/man/man8/ntpdate.8.gz
    问题找到了,在定时服务中,ntpdate命令要使用全路径
    4.使用crontab -e命令修改一下,加上ntpdate命令的目录
    0,10,20,30,40,50 * * * * /usr/sbin/ntpdate time.windows.com &>/xxx/ntpdate.log
    然而保存后,等到整数分钟后,在日志中没有发现该命令执行,为什么呢,猜想如下

    a.以上命令格式错误,时间格式错误

    b.cron自动服务没有执行

    通过网上查找时间的命令格式,发现

    0,10,20,30,40,50 * * * *
    并没有错误,而手动执行
    /usr/sbin/ntpdate time.windows.com &>/xxx/ntpdate.log
    也成功执行,那么就看看b是否存在问题
    5.执行ps -ef | grep cron,查看时间服务进程是否存在
    [root@MyCloudServer xxx]# ps -ef | grep cron
    root     26157 22992  0 10:04 pts/3    00:00:00 grep cron
    发现没有cron执行进程
    6.执行service crond status查看服务状态
    [root@MyCloudServer xxx]# service crond status
    crond is stopped
    竟然服务没有启动,好吧
    7.启动进程,并且查看状态
    [root@MyCloudServer xxx]# service crond start
    Starting crond:                                            [  OK  ]
    [root@MyCloudServer xxx]# service crond status
    crond (pid  26291) is running...
    [root@MyCloudServer xxx]# ps -ef | grep cron
    root     26291     1  0 10:06 ?        00:00:00 crond
    root     26302 22992  0 10:06 pts/3    00:00:00 grep cron
    8.服务启动了,通过vim /etc/rc.d/rc.local命令添加以下语句设置为开机启动
    /sbin/service crond start
    注意也加上了/sbin目录
    9.最后再看看ntpdate.log中有没有执行日志
    [root@MyCloudServer xxx]# cat ntpdate.log 
    29 Dec 11:10:16 ntpdate[29960]: no server suitable for synchronization found
    发现服务器没有找到对应的服务同步,那么猜想应该是time.windows.com服务器在本台服务器上没有获取成功,由于我们用的是香港的云服务器,那么换一个香港认可的地址试试
    0,10,20,30,40,50 * * * * /usr/sbin/ntpdate stdtime.gov.hk &>/xxx/ntpdate.log
    然后等到整时分钟的时候再次查看一下
    [root@MyCloudServer xxx]# cat ntpdate.log 
    29 Dec 11:20:01 ntpdate[30580]: adjust time server 118.143.17.82 offset 0.015206 sec
    可以看到执行成功了

    总结:通过以上问题调查,发现无论什么时候经验主义并不可靠,小小的一个问题都可能引发很多原因。

  • 相关阅读:
    测试某个方法的执行时间
    DataTable与DataGridView绑定
    《认知与设计——理解UI设计准则》笔记(7) 我们的注意力有限,记忆力也不完美
    常用软件收集
    通过反射得到某个实体的属性值
    获取某个字段的最大值
    C# ServerVariables参数说明
    C# 将网址转换为16进制可用网址,防盗链,%%
    不加修改权限的前提,要分辨出那些图片是删除不用的
    C# Winform 域名得到(查询)(服务器所在) IP  cs
  • 原文地址:https://www.cnblogs.com/barfoo/p/4540394.html
Copyright © 2011-2022 走看看