首页 > 代码库 > Linux时间设置

Linux时间设置

场景:Linux时间设置对于系统日志的查看,文件操作很有必要,有时候不可避免的调整系统时间。

1 手动设置

1.1 时区查看

使用date命令查看时区

[root@db-server ~]# date -R Sun, 11 Jan 2015 07:10:28 -0800 [root@db-server ~]# 

 

上面命令输出了-0800表示西八区,是美国旧金山所在的时区,下面表示我们国家的东八区(+0800)

lfcp10:~ # date -RWed, 28 Dec 2016 10:38:51 +0800

 

查看clock系统配置文件

[root@db-server ~]# more /etc/sysconfig/clockZONE="America/Los_Angeles"UTC=trueARC=false

 

如上所示,表示该系统设置的时区为“America/Los_Angeles”,也就是西八区。

1.2 时区设置

方法1:使用tzselect设置时区

例子,将系统时区设置为东八区(北京时间)

[root@db-server ~]# tzselect Please identify a location so that time zone rules can be set correctly.Please select a continent or ocean. 1) Africa 2) Americas 3) Antarctica 4) Arctic Ocean 5) Asia 6) Atlantic Ocean 7) Australia 8) Europe 9) Indian Ocean10) Pacific Ocean11) none - I want to specify the time zone using the Posix TZ format.#? 5Please select a country. 1) Afghanistan           18) Israel                35) Palestine 2) Armenia               19) Japan                 36) Philippines 3) Azerbaijan            20) Jordan                37) Qatar 4) Bahrain               21) Kazakhstan            38) Russia 5) Bangladesh            22) Korea (North)         39) Saudi Arabia 6) Bhutan                23) Korea (South)         40) Singapore 7) Brunei                24) Kuwait                41) Sri Lanka 8) Cambodia              25) Kyrgyzstan            42) Syria 9) China                 26) Laos                  43) Taiwan10) Cyprus                27) Lebanon               44) Tajikistan11) East Timor            28) Macau                 45) Thailand12) Georgia               29) Malaysia              46) Turkmenistan13) Hong Kong             30) Mongolia              47) United Arab Emirates14) India                 31) Myanmar (Burma)       48) Uzbekistan15) Indonesia             32) Nepal                 49) Vietnam16) Iran                  33) Oman                  50) Yemen17) Iraq                  34) Pakistan#? 9Please select one of the following time zone regions.1) east China - Beijing, Guangdong, Shanghai, etc.2) Heilongjiang (except Mohe), Jilin3) central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.4) most of Tibet & Xinjiang5) west Tibet & Xinjiang#? 1 The following information has been given:         China        east China - Beijing, Guangdong, Shanghai, etc. Therefore TZ=‘Asia/Shanghai‘ will be used.Local time is now:      Sun Jan 11 23:31:51 CST 2015.Universal Time is now:  Sun Jan 11 15:31:51 UTC 2015.Is the above information OK?1) Yes2) No#? yesPlease enter 1 for Yes, or 2 for No.#? 1 You can make this change permanent for yourself by appending the line        TZ=‘Asia/Shanghai‘; export TZto the file ‘.profile‘ in your home directory; then log out and log in again. Here is that TZ value again, this time on standard output so that youcan use the /usr/bin/tzselect command in shell scripts:Asia/Shanghai

 

注意:tzselect命令只告诉你选择的时区的写法,并不会生效。所以现在它还不是东8区北京时间。你可以在.profile、.bash_profile或者/etc/profile中设置正确的TZ环境变量并导出。

例如在.bash_profile里面设置 TZ=‘Asia/Shanghai‘; export TZ并使其生效。

需要将上述的时区设置写入配置文件中,

[root@db-server ~]# source .bash_profile [root@db-server ~]# date Sun Jan 11 23:37:40 CST 2015

 

上述方法只是一个过程,我还是倾向使用第二种方法:

方法2:复制相应的时区文件,替换系统时区文件;或者创建链接文件——即时生效

首先查看相应的时区

lfcp10:~ # cd /usr/share/zoneinfolfcp10:/usr/share/zoneinfo # lsAfrica      Atlantic   Canada  EST5EDT  Factory  GMT-0      Iceland  Japan      MST7MDT  PRC       ROC        US         Zulu         zone.tabAmerica     Australia  Chile   Egypt    GB       GMT0       Indian   Kwajalein  Mexico   PST8PDT   ROK        UTC        iso3166.tab  zone1970.tabAntarctica  Brazil     Cuba    Eire     GB-Eire  Greenwich  Iran     Libya      NZ       Pacific   Singapore  Universal  posixArctic      CET        EET     Etc      GMT      HST        Israel   MET        NZ-CHAT  Poland    Turkey     W-SU       posixrulesAsia        CST6CDT    EST     Europe   GMT+0    Hongkong   Jamaica  MST        Navajo   Portugal  UCT        WET        rightlfcp10:/usr/share/zoneinfo # cd Asialfcp10:/usr/share/zoneinfo/Asia # lsAden       Baghdad  Calcutta    Dhaka        Hong_Kong  Kamchatka    Kuala_Lumpur  Muscat        Pyongyang  Seoul          Tel_Aviv       Ust-NeraAlmaty     Bahrain  Chita       Dili         Hovd       Karachi      Kuching       Nicosia       Qatar      Shanghai       Thimbu         VientianeAmman      Baku     Choibalsan  Dubai        Irkutsk    Kashgar      Kuwait        Novokuznetsk  Qyzylorda  Singapore      Thimphu        VladivostokAnadyr     Bangkok  Chongqing   Dushanbe     Istanbul   Kathmandu    Macao         Novosibirsk   Rangoon    Srednekolymsk  Tokyo          YakutskAqtau      Beijing  Chungking   Gaza         Jakarta    Katmandu     Macau         Omsk          Riyadh     Taipei         Ujung_Pandang  YekaterinburgAqtobe     Beirut   Colombo     Harbin       Jayapura   Khandyga     Magadan       Oral          Saigon     Tashkent       Ulaanbaatar    YerevanAshgabat   Bishkek  Dacca       Hebron       Jerusalem  Kolkata      Makassar      Phnom_Penh    Sakhalin   Tbilisi        Ulan_BatorAshkhabad  Brunei   Damascus    Ho_Chi_Minh  Kabul      Krasnoyarsk  Manila        Pontianak     Samarkand  Tehran         Urumqilfcp10:/usr/share/zoneinfo/Asia # 

 

复制相应的时区文件,替换系统时区文件;或者创建链接文件

cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime

  在中国可以使用:

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock

 

方法3:修改/etc/sysconfig/clock文件  ——重启生效 (没试过)

修改/etc/sysconfig/clock文件,把ZONE的值改为Asia/Shanghai,UTC值改为false,改完后的文件如下:

# The time zone of the system is defined by the contents of /etc/localtime.  # This file is only for evaluation by system-config-date, do not rely on its  # contents elsewhere.  ZONE="Asia/Shanghai"  UTC=false  ARC=false 

 

1.3 手动设置时间

date命令:

lfcp10:~ # dateWed Dec 28 10:26:07 CST 2016

设置时间:

lfcp10:~ # date -s "2016-01-01 10:10:10"Fri Jan  1 10:10:10 CST 2016lfcp10:~ # date -s "2016-12-28"Wed Dec 28 00:00:00 CST 2016lfcp10:~ # date -s "10:34:20"Wed Dec 28 10:34:20 CST 2016lfcp10:~ # dateWed Dec 28 10:34:24 CST 2016lfcp10:~ # 

 

将时间写入bios避免重启失效:

hwclock -w

2 同步网络时间 

在Linux下,我们可以使用ntpdate进行网络时间的同步,而不是我们自己去设置时间。这个命令的使用很简单,

ntpdate  0.cn.pool.ntp.org

 

另外网络时间同步和时区是不一样的。你可以选择任何一台网络时间同步服务器来同步你的时间,只要你的时区设置是对的,那么你的Linux上的时间就是对的。因为全球都是基于一个标准时间来约定的,美国人民与我们不同的是时区不同,经过换算,我们和他们的标准时间是一样的。

2.1 定时的同步时间

我们可以使用crontab来定时的同步时间

vim /etc/crontab10 5 * * * root (/usr/sbin/ntpdate 0.cn.pool.ntp.org && /sbin/hwclock -w) &> /var/log/ntpdate.log

每天的5点10分crontab运行一次命令,自动同步时间。

如果你具有多台的服务器,不要使用这个方法来定时的同步的你服务器,请使用ntpd来进行,这个还可以校准始终的问题。详情查看鸟哥。

使用ntpdata造成的时间的越变还可能引发因某些依赖连续时间的程序的问题。一般第一次使用ntpdate,接下来使用ntpd服务来不断的调整时间。参见http://blog.sina.com.cn/s/blog_3f3422fd0100f06c.html。

全球那么多的网络时间同步器,那么使用哪个好呢。我们知道数据在网络上流动是由延迟的,因此我们选择离我们服务器越近的服务器进行同步,时间越准。

时间服务器分为两种,一种是一级时间服务器,另外一种是二级时间服务器。我们如果是同步自己的服务器的时间,那么选择二级时间服务器,因为一级时间服务器是为二级时间服务器提供时间校对服务器,我们尽量不要增加一级服务器的压力。这种层级的概念和DNS的层级概念是一致的。

一级时间服务器列表:http://support.ntp.org/bin/view/Servers/StratumOneTimeServers

二级时间服务器列表:http://support.ntp.org/bin/view/Servers/StratumTwoTimeServers

附二级服务器列表:

  • 0.pool.ntp.org  有域名负载均衡
  • 0.cn.pool.ntp.org  有域名负载均衡
  • ntp.tuna.tsinghua.edu.cn 清华大学
  • time.windows.com    微软

ntpdate命令:

网络时间同步命令

ntpdate -u 210.72.145.44 

注意:若不加上-u参数, 会出现以下提示:no server suitable for synchronization found
-u:从man ntpdate中可以看出-u参数可以越过防火墙与主机同步;
210.72.145.44:中国国家授时中心的官方服务器。

ntp常用服务器:
中国国家授时中心:210.72.145.44
NTP服务器(上海) :ntp.api.bz
美国:time.nist.gov
复旦:ntp.fudan.edu.cn
微软公司授时主机(美国) :time.windows.com
台警大授时中心(台湾):asia.pool.ntp.org

经测试中国国家授时中心与NTP上海服务器可以正常同步时间,注意需要加上-u参数!

Linux时间设置