centos没有clock(centos9出来了吗)

很多朋友对于centos没有clock和centos9出来了吗不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!

CentOS下永久修改系统时间的方法

使用Centos,遇到本地时间对不上,直接敲命令:date-s 2017-01-0510:15:15是立即生效了,但是重启后,系统时间还是原来的。

后面经过查找资料,做个小结.

我的Centos是安装在虚拟机上。在虚拟机有分系统时间和硬件时间。修改了其一是没有办法奏效,必须两者都更改。

1.date{查看目前本地的时间}

2.hwclock--show{查看硬件的时间}

3.如果硬件的时间是对不上,那就对硬件的时间进行修改、

4.hwclock--set--date'014-12-15 15:15:15'{设置硬件时间}

5.hwclock--hctosys{设置系统时间和硬件时间同步}

6.clock-w{保存时钟}

7.最后在通过重启,init 6快速重启后,查看系统时间是否真正生效!!!!1

CentOS系统中与时间的相关命令详解

时间在任何系统里都是最基本的部分,必不可少。本文介绍CentOS系统中与时间的相关命令。

基本概念

硬件时钟(Hardware Clock)

硬件时钟,也叫实时时钟(RealTimeClock),或者BIOS时钟,或者CMOS时钟。它是位于机器主板上的实际硬件设备,一般靠电池维持运行。所以,即使机器关机,它也会一直保持记录当前时间,一般不是十分精确。

系统时间(System Time)

系统时间指的是操作系统中的时间。它是由系统加电后的硬件定时器驱动,Linux系统根据定时器信号来递增时间计数。这个定时器非常准确,误差很小。

Linux系统启动时,首先从硬件时钟读取当前时间来初始化系统时间计数,之后就会根据定时器中断来递增它,不再依赖于硬件时钟。

时区(time zone)

世界各国日出的时间并不相同,而日出的时刻却都被当地称作6点钟,同一时刻,各国的钟表指针位置并不相同。也就造就了时区的出现。UTC是世界标准时,其他时区都是在此基础上增减。例如我国的北京时间就比世界时早8个小时。

硬件时钟里一般不会记录时区的信息,而往往只是当地时间。系统时间就必须要把时区的概念考虑进去,否则不同时区的计算机进行信息交流的时候,时间不能统一。这对于很多软件系统是致命的,如严重依赖于时间标签的版本管理系统。Linux内核中保存了当前时区的信息,Linux的文件系统就依赖于这个时区信息。

常用命令

1查看与设置当前BIOS时间

[root@centos192 smstong]# hwclock-r#读取硬件时钟 2015年06月03日星期三 12时30分46秒-0.891230 seconds [root@centos192 smstong]# hwclock--set--date=06/03/2015 16:45:05#设置硬件时钟

2查看与设置当前操作系统时间

[root@centos192 smstong]# date#查看当前系统时间 2015年 06月 03日星期三 19:37:55 CST [root@centos192 smstong]# date-s 10:00:00#设置系统时间 2015年 06月 03日星期三 10:00:00 CST

3硬件时钟与系统时间交互

[root@centos192 smstong]# hwclock--hctosys#用硬件时钟设置系统时间 [root@centos192 smstong]# hwclock--systohc#用系统时间设置硬件时钟

4查看与设置当前系统的时区

[root@centos192 smstong]# date-R#查看带时区信息的当前系统时间 Wed, 03 Jun 2015 19:45:37+0800 [root@centos192 smstong]# export TZ='America/Havana'#设置时区为古巴时间 [root@centos192 smstong]# date-R#可以看到时区成了-0400 Wed, 03 Jun 2015 07:49:49-0400

要想永久性的设置时区信息,则可以在/etc/profile配置文件里增加 export TZ=America/Havana。这样机器重启后也会自动设置时区。

注意Linux内核和应用程序使用的时区并不一定相同,虽然应该相同。应用程序首先靠TZ环境变量来确定时区,如果TZ没有设置,则使用内核的设置。内核是根据/etc/sysconfig/clock文件来设置时区的。*(这段是我的猜测,请大侠指正)*

5通过网络校时前面我们说过硬件时钟往往不太准确,系统时钟虽然比较准确,但是仍不能满足高精度的时间要求。最好的方式就是通过NTP协议从专门的时间服务器来读取正确的时间,然后校正系统时间和硬件时钟。

[root@centos192 smstong]# ntpdate-u s1a.time.edu.cn#通过NTP校时修正系统时间 3 Jun 19:56:42 ntpdate[21550]: adjust time server 202.112.10.60 offset 0.000163 sec [root@centos192 smstong]# hwclock-w#然后根据矫正过的系统时间设置硬件时钟

如果是长时间运行的服务器,则需要把校时命令写成脚本,通过crond自动定时执行之。

【UTC】CentOS7修改时区的正确姿势

整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC,Universal Time Coordinated)。

格林威治标准时间(Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同,本文中不做区分)

中国标准时间(China Standard Time)【GMT + 8 = UTC + 8 = CST】

夏令时(Daylight Saving Time)指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用。(中国不使用)

RTC(Real-Time Clock)或CMOS时钟,一般在主板上靠电池供电,服务器断电后也会继续运行。仅保存日期时间数值,无法保存时区和夏令时设置。

一般在服务器启动时复制RTC时间,之后独立运行,保存了时间、时区和夏令时设置。

在CentOS 6版本,时间设置有date、hwclock命令,从CentOS 7开始,使用了一个新的命令timedatectl。

Centos7修改系统时区timezone ,解决快、慢8小时问题

如果服务器用非 UTC的时间,时区转换很容易不一致,而且对于有 daylight saving的时区,每年多一小时少一小时的那两天,系统就会出现各种诡异现象。

服务器使用UTC时间,如要显示用户所在时区的本地时间,在客户端转化即可。

# timedatectl

我们可以看到,服务器使用的CST时间

# timedatectl set-timezone UTC

# timedatectl set-time"YYYY-MM-DD HH:MM:SS"

# timedatectl set-time "HH:MM:SS"

# timedatectl

我们可以看到,服务器时间类型更改为UTC了

# ll /etc/locatime

lrwxrwxrwx. 1 root root 25 1月 14 08:30 /etc/localtime->../usr/share/zoneinfo/UTC

实际上是做了一个将 

 文件 /etc/localtime 做了一个软连接到 /usr/share/zoneinfo/UTC

# ln -s /usr/share/zoneinfo/UTC  /etc/localtime

ln:无法创建符号链接"/etc/localtime":文件已存在

# ln -sf /usr/share/zoneinfo/UTC   /etc/localtime

做软连接时,需要加-f参数,强制覆盖,不然会显示软链接已存在

# timedatectl set-time"YYYY-MM-DD HH:MM:SS"

# timedatectl set-time "HH:MM:SS"   //只设置时分秒

# timedatectl

# clock -w

# date -u  //显示UTC时间

CentOS7修改时区的正确姿势

CentOS7上运行Java程序,发现程序生成的时间与当前时间匹配不上,还以为是数据停止更新了,后来发现没有正确使用修改时区的姿势,导致程序时区错误。

正确的修改CentOS7时区的姿势:

#  ln -sf/usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

其他系统的修改文件可能是/var/etc/localtime.

错误的姿势:通过cp命令覆盖/etc/localtime时间

 # cp-f /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

通过cp命令修改时区,通过date, data-R命令显示的时区都是正确的,可是对于java程序而言,是错误的。

具体原因在于Java访问系统时区的方式上,可参见文章:

Java TimeZone和 Linux TimeZone问题

该文章很好的说明了Java访问系统时区的方式:

1.如有环境变量 TZ设置,则用TZ中设置的时区

2.在/etc/sysconfig/clock文件中找“ZONE”的值

3.如何2)都没,就用/etc/localtime和/usr/share/zoneinfo下的时区文件进行匹配,如找到匹配的,就返回对应的路径和文件名。 

问题在于,如果使用cp命令来修改/etc/localtime文件,那么可能就会导致修改的不是/etc/localtime文件,而是原时区的文件内容。

/etc/localtime是通过符号链接链接/usr/share/zoneinfo下的文件,而java是通过文件名来确认时区的,data命令是通过文件内容确认时区的,这样就导致了data命令时区正确,而java的时区是错误的!

如上图所示:CentOS7是通过符号链接到/usr/share/zoneinfo/下的时区文件的,如果通过cp指令只会修改原时区文件内容,这样,通过date的系统命令,查看时间是OK的,可是java是通过读取文件名的方式确认时区信息的。所以时区还是纽约。

阅读剩余
THE END