linux如何修改时区不重启立即生效

不知不觉已经写了第100篇博客了,时间过得真快,不过首先庆祝一下自己已经写了100篇…坚持写下去确实需要有一定耐心。好吧这一篇文章并不是庆祝咱们写的文章数量而是聊一聊如何在linux内核系统中如何修改时区并且不重启立即生效!

首先说说我当时为啥会想到时区这个概念!

时区和date有什么不同?

虽然两者都是代表着时间的概念,不过在linux系统中如果你的时区是UTC0而date显示的时间是UTC8。那么会出现表面上看去时间是一致的不管你用ntpdate同步几遍都一样,但是日志输出时间、cron应用执行时间都是按照时区中的时间进行。比如你的date时间是早上8点,并且每天早上8点执行一个cron任务。如果时区不是UTC8的中国时间而是UTC0那么cron执行的时间肯定是凌晨0点!并且日志显示的也会是凌晨执行。所以修改时区比date时间要重要的多,否则会出现很多时间上的问题。

如何重启一次性解决时区的问题?

修改/etc/sysconfig/clock文件下的内容,或者使用命令tzselect进行。直接使用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 Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#? n
Please enter a number in range.
#? ^C
[root@git BDcooperation]# 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 Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#? 5
Please 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) Taiwan
10) Cyprus 27) Lebanon 44) Tajikistan
11) East Timor 28) Macau 45) Thailand
12) Georgia 29) Malaysia 46) Turkmenistan
13) Hong Kong 30) Mongolia 47) United Arab Emirates
14) India 31) Myanmar (Burma) 48) Uzbekistan
15) Indonesia 32) Nepal 49) Vietnam
16) Iran 33) Oman 50) Yemen
17) Iraq 34) Pakistan
#? 9
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1
#选择好以后会自动将内容放置到/etc/sysconfig/clock中

随后重启就能更换时区,查看时区使用date -R或者去配置文件 /etc/sysconfig/clock去看!不过在线上环境中是不可能重启了。并且有些公有云上的镜像文件时区都是没改!!!如果遇到这种情况不能重启线上环境并且还要立即生效修改时区怎么办?

不重启系统的情况下修改时区:

首先时区文件并不是虽然是从配置文件读取,但是会写到一个文件中给系统提供,这个文件在/etc/localtime但是这个文件并不是配置文件里面是乱码(说明二进制格式码)。所以不能手动进行配置,不过我们可以看看tzselect命令的执行过程,它是从/usr/share/zoneinfo/中读取某个文件并将结果返回给/etc/sysconfig/clock。所以我们只要把源码文件拷贝到/etc并覆盖localtime就OK了。

执行命令(比如是上海、北京、香港时区的)执行 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime即可覆盖,不过首先看看Shanghai是不是空文件才行。我这里遇到过Shanghai是空文件后来从其他服务器拷贝的文件再去覆盖!

拷贝完毕之后看看时区是不是更改了?最简单的办法就是查看日志文件执行的日志时间是否与当前时间一致?你可以重启一个应用查看,比如重启crond服务随后去/var/log/cron日志查看!

结语:

一般遇到这种问题基本就是安装操作系统时候选择的默认时区,或者租用的VPS的映像文件的时区就不对!所以我的建议是最好安装完机器之后看看时间和时区,这样重启方便。如果遇到时区问题是前者留下的也只能按照这个办法做,最好粘贴文件之前将/etc/sysconfig/clock内容改好后再粘贴!这样重启后时区不会变回原来的时区。

Comments

Leave a Reply

Your email address will not be published. Name and email are required