时间同步

来源:互联网 发布:如何在淘宝上申请试用 编辑:程序博客网 时间:2024/04/29 11:59
 

发现 ubuntu 总是时间不对劲,用一个晚上学习和尝试解决,总结一下。

学习要点(尽量在终端应用):
时区设置 date hwclock ntpdate crontab 运行级

一、设置时区

1.新建了目录:
sudo mkdir /etc/sysconfig

2.新建了 clock 文件:
sudo gedit /etc/sysconfig/clock

文档内容为:
#My Config
ZONE=”Asia/Shanghai”

该文档是本地时区设置文档,本地时区被设置为 亚洲/上海

3.将时区文档 Shanghai 复制并覆盖为: /etc/localtime:
sudo cp -i /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

二、手动校时

date MMDDhhmmYYY(月日时分年)
该命令用来调整 linux 系统时间

hwclock [-rw]
该命令用来将系统当前时间写进 BIOS

1.校时
打开 http://www.time.ac.cn/default.asp 显示中科院国家授时中心网络时间作参考,然后调整如:
sudo date 032421152006

2.查看系统时间与BIOS时间是否差异:
sudo date;hwclock -r

显示如:
五 3月 24 21:38:15 CST 2006
2006年03月24日 星期五 21时40分12秒 -0.679739 seconds

有差异的。

3.将系统时间写入BIOS
sudo hwclock -w

OK!

因为每次开机,系统会重新从BIOS获得时间,所以BIOS时间正确才是首要的。
这是手动校时,每次都要手动,不爽,下面用自动的。
三、网络校时

首先增加防火墙 shorewall 规则,放行 ntpdate 的 udp 123 端口:
sudo gedit /etc/shorewall/rules

增加划线内的规则:
==================
ACCEPT fw net udp 123
ACCEPT net fw udp 123
==================

*先来了解需要用到的网络时间同步命令:
ntpdate 时间服务器

如:
sudo ntpdate 210.72.145.44 (或 210.0.235.14 或 137.189.11.66)

回复像如下信息即校时成功:
step time server 210.0.235.14 offset 1581.457933 sec

该命令也是手动校时,却比 date 修改时间好多了。

现在来实现自动校时:

设置每30分钟自动时间同步(推荐):
(1)编辑临时任务文件
gedit /tmp/mycrontab

内容:
*/30 * * * * root /usr/sbin/ntpdate 210.72.145.44 ;/sbin/hwclock -w;echo: “Ntpdate Successful! $(date)” >> /tmp/mycron.log

以上共3个命令,分号分开。
第一个是:以root用户身份每30分钟自动与时间服务器 210.72.145.44 同步。
规则是:(五个时间+[用户]+[多条]命令) 分 时 日 月 周 [用户] [多条]命令
参考:Crontab How To
第二个是:将系统时间写入BIOS。
第三个是:将成功执行该crontab的信息写入 /tmp/mycron.log 文件(主意:当确定该计划任务执行正确后,这个命令是不必要的,应该去掉,否则,长期下去 mycron.log文件很快就撑暴了)。

(2)安装计划任务
要使该计划任务成功执行,需要以sudo身份安装该crontab:
sudo crontab /tmp/mycron.log

这样,每30分钟,系统时间就会与时间服务器自动同步了,可查看 /tmp/mycron.log 记录:
cat /tmp/mycron.log。

为了保证时间同步成功,不要太频繁与时间服务器同步,每分钟同步是不必要的。

取消该crontab:
sudo crontab -r

查看当前的 crontab:
sudo crontab -l

修改该计划任务:
需要重新安装crontab,即修改 /tmp/mycrontab 文件,然后用 sudo crontab /tmp/mycrontab 命令重新安装。

每个用户都有自己的 crontab,这里用 sudo ,是因为 ntpdate 需要 root 权限。

设置开机自动校时:

(1)设置时间服务器:

sudo gedit /etc/default/ntpdate

全文修改为:
===================
# servers to check. (Separate multiple servers with spaces.)
#NTPSERVERS=”pool.ntp.org”
#NTPSERVERS=”ntp.ubuntulinux.org”

#中国科学院国家授时中心 210.72.145.44
#香港 137.189.11.66 或 210.0.235.14
NTPSERVERS=210.72.145.44
NTPSERVERS=137.189.11.66
NTPSERVERS=210.0.235.14
# additional options for ntpdate
#NTPOPTIONS=”-v”
#-u 参数是指定使用无特权的端口发送数据包。
#当在一个对特权端口的输入流量进行阻拦的防火墙后是很有益的, 并希望在防火墙之外和主机同步。
#NTPOPTIONS=”-u”
==================
保存退出

(2)自动启动 ntpdate (网络时间同步服务客户端, ntpd 为服务器端)
当 /etc/rcS.d/ 目录存在 ntpdate 没有启动的链接文件如 s51ntpdate 时,将小写 s 改为大写 S :
sudo mv /etc/rcS.d/s51ntpdate /etc/rcS.d/S51ntpdate

当 /etc/rcS.d/ 目录不存在 ntpdate 链接文件时,建立该链接:
sudo ln -s /etc/init.d/ntpdate /etc/rcS.d/S51ntpdate

(S51ntpdate 在网卡启动、宽带上网、防火墙启动之后启动)
(若用 sudo update-rc.d ntpdate defaults 命令,则同时建立rc2~6运行级的S20ntpdate链接)

这样,系统启动后,ntpdate 网络时间同步服务就被启动了。

原创粉丝点击