ntpdate是NTP协议的客户端,通过 ntpdate ip 命令可以将本机的系统时间与 服务器的时间同步。而crond服务可以定时执行相应的任务,因此ntpdate+crond的组合可以实现周期性的对时动作。

  1. ntpdate
    首先确认本机系统中有没有安装ntpdate,没有安装的话,去[http://www.ntp.org/downloads.html]下载ntp源代码,进行编译,最后可得到 ntpdate、ntpd等,我们这里只需将ntpdate拷贝到系统中相应的位置即可。
    我采用的是飞凌okmx6ul-c开发板,内部Linux系统已有ntpdate,在/sbin。服务器IP 172.16.30.27。
    ntpdate 172.16.30.27 可以实现ntp对时,注意此处修改的是系统时间,硬件时间需要进一步执行 hwclock - w命令。还需注意的是通过 ntp 得到的时间是 UTC 时间,北京时间需要在使用时 + 8小时。

2.crond服务
crond是服务,与之对应的是crontab命令。crontab命令格式:

Usage: crontab [-c DIR] [-u USER] [-ler]|[FILE]

        -c      Crontab directory
        -u      User
        -l      List crontab
        -e      Edit crontab
        -r      Delete crontab
        FILE    Replace crontab by FILE ('-': stdin)

crontab可以设置周期性执行的命令,具体的配置存储在“crontab”文件中。在/var/spool/cron/crontabs 里对不同的用户建立不同的”crontab”文件,(注:没有/var/spool/cron/crontabs 的,手动建立问价夹 mkdir -p /var/spool/cron/crontabs ).
crontab -e 命令可以编辑 “crontab”文件,一般Linux系统中默认使用 vi 编辑器。
crontab -l 命令可以查看“crontab”文件内容。“crontab”文件中的命令格式如下图:
这里写图片描述

(1)建立“crontab”文件, crontab -e ,文件不存在会新建一个文件。我采用的飞凌开发板系统使用root用户,编辑如下内容:

SHELL=/bin/sh
PATH=/bin;/sbin;/usr/bin;/usr/sbin
HOME=/                            
#run-parts
*/30 * * * * /etc/settm  #settm是ntp设置时间的脚本

保存退出,查看/var/spool/cron/crontabs 文件夹下,有如下文件,root文件即为“crontab”文件。
这里写图片描述

(2)建立设置时间脚本,在/etc文件夹下,vi settm,

#!/bin/sh
ntpdate 172.16.30.27
hwclock - w           
echo "settime oK ">/dev/console #此处>/dev/console是必要的,因为此脚本的终端不同,没有此项console看不到信息

注意文件属性,chmod 777 settm

(3)设置crond的开机启动,不同的定制版本位置不同,我采用飞凌okmx6ul-c开发板,

首先,cp crond /etc/rc.d/init.d
其次,修改rc.conf文件,cfg_services=”mount-proc-sys udev hostname depmod modules filesystems inetd syslog crond
最后,断电重启,通过 ps -ef 查看crond 是否启动。

(4) 通过以上步骤实现了每30分钟进行一次对时。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐