Linux系统的时区和时间调整
在CentOS 7里面有一个命令timedatectl可以帮助我们修改服务器的时区。
首先我们可以使用timedatectl命令查看目前服务器里的时区设置:
Local time: Wed 2015-07-22 16:48:14 CST
Universal time: Wed 2015-07-22 08:48:14 UTC
Timezone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: yes
DST active: n/a
可以看到目前服务器里的所有设置比如时间、时区、NTP等等
我们可以使用命令"timedatectl list-timezones"查看所有的时区
查看完时区后我们可以使用命令"timedatectl set-timezone 时区"
例如我们需要设置成上海的时间区:"timedatectl set-timezone Asia/Shanghai"
设置完时区后当然还可以设置NTP服务器的开启和关闭
开启NTP:"timedatectl set-ntp yes"
关闭NTP:"timedatectl set-ntp no"
当然timedatectl命令还可以设置日期与时间
设置日期:"timedatectl set-time YYYY-MM-DD"
设置时间:"timedatectl set-time HH:MM:SS"
linux调整系统时区:
1)tzselect命令
找到相应的时区文件/usr/share/zoneinfo/Asia/Shanghai,用这个文件替换当前的/etc/localtime文件。
或者# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime,这时date一下应该是CST时间了。
如果还不行,那就要修改一下TZ环境变量的值了。
许多程序和命令都会用到这个变量的值,TZ的值可以有多种格式,最简单的设置方法就是使用tzselect命令或者终端输入TZ='CST-8'; export TZ就可以了。
不过这个改变只在这次登陆生效,如果想要永久生效的话,就要把TZ='CST-8'; export TZ这两句添加到你的.profile文件里。
Linux里确定系统时区先看TZ环境变量,如果TZ环境变量没有设置,然后再读取/etc/localtime文件来确定你的时区
最好办法验证:echo "TZ='Asia/Shanghai'; export TZ" >> .bash_profile
2)/etc/sysconfig/clock文件
这个文件控制如何解读硬件时钟 (hardware clock)的时间。
系统在启动的时候读取/etc/sysconfig/clock 文件的内容,根据这些内容调用hwclock 命令,来设置系统时钟。
下面是转来的该文件配置项的解读:
设定档案 /etc/sysconfig 控制如何解读由硬体时钟 (hardware clock) 的时间。
UTC=true|yes|false|no - 指定硬体时钟的时间是格林威冶时间还是系统本地时间。true 或 yes 表示硬体时钟是使用格林威冶时间,其他则为本地时间。预设为本地时间。
ARC=false|no - 指定硬体时钟是否 1980 epoch 时间 (一般使用 ARC 主控台的 Alpha 电脑使用的 epoch 时间)。false 或 no 表示使正常 UNIX epoch 时间 - 1970。预设使用正常 UNIX epoch 时间
SRM=false|no - 指定硬体时钟是否 1900 epoch 时间 (一般使用 SRC 主控台的 Alpha 电脑使用的 epoch 时间)。false 或 no 表示使正常 UNIX epoch 时间 - 1970。预设使用正常 UNIX epoch 时间
ZONE=时区 - 现时系统本地时区名称,只让时间日期属性工具 system-config-data 知道现时 /etc/localtime 所指的时区,改变其值并不会改变实际的系统时区。其值 必须为 /usr/share/zoneinfo 下的时区档案名称。
这里提供一个该文件的配置:
ZONE="Asia/Shanghai"
UTC=false
ARC=false
注意:
如果你原来的设置的硬体时钟时间是格林威治时间要记得更改这个命令之后,要记得用4)的方法把系统时间写入硬体时钟,否则,下次启动系统会把硬体时钟记录 的格林威治时间解读为Asia/Shanghai的当前时间。
3)调整系统时间方法
时间设定成2005年8月30日的命令如下:
#date -s 08/30/2005
将系统时间设定成下午6点40分0秒的命令如下。
#date -s 18:40:00
这里设置的时间只是设置了系统时间,系统下次重启之后,还是会从硬体时钟读取原来的时间,所以为了使时间设置生效就要使用4)的命令
如果想要与标准时间同步的话就要使用ntpdate ,和NTP服务器做一个时间同步。同样,这里也要把同步后的系统时间利用4)的方法写入到硬体时钟。
ntpdate cn.pool.ntp.org ,端口 UDP 123
4)将系统时间写入硬件时钟COMOS
可以使用clock或hwlock命令,也可以在BIOS里设置硬体时钟的时间。
clock命令
#clock –w
hwlock命令
# hwclock –systohc
关于linux的系统时钟和硬体时钟:
linux系统有两个时钟,一个是系统时钟,一个是硬体时钟(COMOS),硬体时钟就是主板上通过晶振计时的时钟,通常是由一块电池供电,一般能用三年 左右。
Linux系统在启动时,会先读取硬体时钟,把硬体时钟的时间设置为当前的系统时间,之后,系统时间就和硬体时钟独立运行了。系统时钟由linux内核维 护,硬体时钟还是晶振控制。
5) NTP定时任务
# crontab -e
* */1 * * * ntpdate cn.pool.ntp.org
或者 echo “ * */1 * * * ntpdate cn.pool.ntp.org” >> /etc/crontab