Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7173193
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类: LINUX

2014-03-08 16:47:13

原文地址:Linux 时间同步问题 作者:qingshanli1988

有时服务器,需要调整时区并调整时间.
方法有很多种,我说说我经常用,而且是最简单的方法吧.

引用

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate us.pool.ntp.org

很简单吧,解析一下,第一句是把当前时区调整为上海就是+8区,想改其他时区也可以去看看/usr/share/zoneinfo目录;然后第二句是利用ntpdate同步标准时间.

没有ntpdate的可以yum一下:

引用

yum install -y ntpdate

另外VMWARE下的linux时间老是不对,也可以用ntpdate来调整,算最烂的方法吧

引用

crontab -e /usr/sbin/ntpdate us.pool.ntp.org | logger -t NTP

 

 

#more /root/time.sh
#!/bin/sh
/usr/bin/ntpdate  asia.pool.ntp.org     实现linux和时间服务器的时间同步
/sbin/hwclock -w  实现bios和linux的时间同步
#crontab -l
01 6 * * * sh /root/time.sh
例子2:
#crontab -l
01 6 * * * /usr/sbin/ntpdate time.windows.com  >> /root/ntpdate.log
例子3:
01 6 * * * /usr/sbin/ntpdate asia.pool.ntp.org 
这个时间服务器的ntp会计算网络传输中的误差.

 

 

 

 

 

 

 

 

具体一直不太了解为什么LINUX上的时间总是无法完全正确,每次设置完时间后果几个月总是与实际时间有一定的差距,因此在本地上传一些信息上去的时候都会提示时间错误等问题,很烦人。解决的办法就只能是时间同步,每小时或者每天做一次同步,由于时效要求没有那么高,因此这种同步方式最合适。

      LINUX下有个ntpdate命令专门用来同步时间,格式如:

ntpdate ip地址

在网上找了一圈发现一个中国国家授时中心的官方服务器:210.72.145.44

然后编写一个sh文件,在文件中加入"ntpdate 210.72.145.44",并授权执行。

# vi timeRsycn.sh

# chmod 777 timeRsycn.sh

在crontab中加入该脚本

# crontab -e

00 * * * * sh /usr/local/batch/timeRsync.sh

搞定!如果其他服务器需要同步该服务器上的时间需要把主服务器开启13端口,最好在iptables中设置好防火墙规则保证同步信息的安全。

 

 

 

 

 

 

 

 

 

 

一、搭建时间同步服务器
1、编译安装ntp server

wget ~ntp/ntp_spool/ntp4/ntp-4.2/ntp-4.2.6p4.tar.gz
tar zxvf ntp-4.2.4p4.tar.gz
cd ntp-4.2.4p4
./configure --prefix=/usr/local/ntp --enable-all-clocks --enable-parse-clocks
make && make install

注:如以上下载地址无法访问,请从ntp官方下载网页()寻找下载地址。

2、修改ntp.conf配置文件

vi /etc/ntp.conf

①、第一种配置:允许任何IP的客户机都可以进行时间同步

将“restrict default nomodify notrap noquery”这行修改成:

restrict default nomodify

配置文件示例:

/etc/ntp.conf

②、第二种配置:只允许192.168.18.***网段的客户机进行时间同步

在restrict default nomodify notrap noquery(表示默认拒绝所有IP的时间同步)之后增加一行:

restrict 192.168.18.0 mask 255.255.255.0 nomodify

配置文件示例:

/etc/ntp.conf

3、以守护进程启动ntpd

/usr/local/ntp/bin/ntpd -c /etc/ntp.conf -p /tmp/ntpd.pid

4、ntpd启动后,客户机要等几分钟再与其进行时间同步,否则会提示“no server suitable for synchronization found”错误。

二、配置时间同步客户机

vi /var/spool/cron/root

增加一行,在每天的5点13分、9点13分、14点13分、19点13分与时间同步服务器进行同步

13 5,9,14,19 * * * /usr/sbin/ntpdate 192.168.18.2

备注:如果客户机没有ntpdate,可以下载ntpdate.tar.gz到/usr/sbin/目录,然后解压:

wget http://blog.s135.com/attachment/200708/ntdate.tar.gz
cd /usr/sbin/
tar zxvf ntpdate.tar.gz

 

 

 

 

 

 

 

 

 

当有多台服务器共同工作时,有时候时间的不同步会带来不小的麻烦,最近,我就遇到了这样的情况。
下面是我在AS下处理服务器时间同步的工作笔记,已经成功的应用到实际中了。

1.将一台能够上网的服务器作为时间服务器:
# /usr/bin/rdate -s time-b.timefreq.bldrdoc.gov //将时间服务器与互联网时间服务器同步
# /etc/init.d/ntpd start //启动时间服务器
# vi /etc/cron.weekly/rdateweekly.sh //设置计划任务,每周同步一次时间
----------------------------------------
#!/bin/sh
/usr/bin/rdate -s time-b.timefreq.bldrdoc.gov
----------------------------------------
# chmod a+x /etc/cron.weekly/rdateweekly.sh
# setup //将ntpd设置成为开机自启动
# vi /etc/sysconfig/iptables //修改防火墙使允许时间服务器通信
----------------------------------------
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 123 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 123 -j ACCEPT
----------------------------------------
2.设置局域网内其它服务器与该时间服务器同步
# ntpdate 192.168.0.100 //该IP为上面的时间服务器IP
# vi /etc/cron.weekly/ntpdateweekly.sh //设置计划任务,每周同步一次时间
----------------------------------------
#!/bin/sh
/usr/sbin/ntpdate 192.168.0.100
----------------------------------------
# chmod a+x /etc/cron.weekly/ntpdateweekly.sh
3.搞定了,以后再也不用为时间的不同步而烦恼了。

PS:同步时间还可以使用 # ntpdate time.nist.gov 或 # ntpdate time.windows.com 这是两台很稳定的时间服务器。

 

 

提示:执行同步时间任务前,最好先同步好时间。

系统时间的设置:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

date -s可以直接设置系统时间

比如将系统时间设定成1996年6月10日的命令如下。

#date -s 06/10/96
将系统时间设定成下午1点12分0秒的命令如下。
#date -s 13:12:00

注意,这里说的是系统时间,是linux由操作系统维护的。

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

#clock -w
这个命令强制把系统时间写入CMOS

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

crontab命令详解:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

参照:

crontab可以定时去执行你要做的动作

直接用crontab命令编辑
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务

一般使用crontab -e来编辑一个计划动作,编辑模式同vi编辑器相同

crontab内的基本编辑格式如下

* * * * * command
分 时 日 月 周 命令

第1列表示分钟1~59 每分钟用*或者 */1表示

第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

crontab文件的一些例子:

30 21 * * * /etc/init.d/smb restart
上面的例子表示每晚的21:30重启smb 。

45 4 1,10,22 * * /etc/init.d/smb restart
上面的例子表示每月1、10、22日的4 : 45重启smb 。

10 1 * * 6,0 /etc/init.d/smb restart
上面的例子表示每周六、周日的1 : 10重启smb 。

0,30 18-23 * * * /etc/init.d/smb restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启smb 。

0 23 * * 6 /etc/init.d/smb restart
上面的例子表示每星期六的11 : 00 pm重启smb 。

* */1 * * * /etc/init.d/smb restart
每一小时重启smb

* 23-7/1 * * * /etc/init.d/smb restart
晚上11点到早上7点之间,每隔一小时重启smb

0 11 4 * mon-wed /etc/init.d/smb restart
每月的4号与每周一到周三的11点重启smb

0 4 1 jan * /etc/init.d/smb restart
一月一号的4点重启smb
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

可用的ntp服务器:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

ntp.api.bz

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

时间同步:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ntpdate asia.pool.ntp.org(先执行一次同步在执行时间同步任务前)

上面此命令就是去同步授时中心的时间

如果要让系统每天23:00去同步,这样可以使用上面所将的crontab设置计划同步

如下命令

#crontab -e

进入crontab编辑模式,使用方法同vi

输入 0 23 * * * ntpdate asia.pool.ntp.org >> /var/log/ntpdate.log

保存退出

这样就完成了你的系统到每天23:00去asia.pool.ntp.org 同步时间,并将同步的日志放到

/var/log/ntpdate.log

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

crontab中经常配置运行脚本输出为:>/dev/null 2>&1,来避免crontab运行中有内容输出(参照百度百科)

注:要使系统时间准确,最好还是使用ntp方式

使用ntpdate命令从网络同步时间,再同步到硬件时钟
ntpdate命令是使用NTP协议来从网络同步时间的命令。NTP=Network Time Protocol 网络时间协议。

[root@linuxso.com~]# ntpdate 0.rhel.pool.ntp.org
6 Nov 21:17:55 ntpdate[4829]: step time server 123.146.124.28 offset -1.025258 sec
[root@linuxso.com~]# date
2010年 11月 06日 星期六 21:17:59 CST
[root@linuxso.com~]# hwclock -w

阅读(877) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~