Linux系统时间重启后变化原因

本文详细探讨了Linux系统中时间同步的问题,特别是系统时间和硬件时间(BIOS时间)之间的差异及影响。通过分析不同配置下重启后的时间变化,提供了解决方案,并介绍了如何正确设置时区。

1.       系统时间变化原因分析

Linux的时间有两种,一是系统时间,另外是硬件时间(BIOS时间)。

系统每次启动时会读出BIOS时间,将之赋给系统时间。之后系统时间将独立运行,而BIOS时间不会变化。

 

BIOS时间中,有两种表示形式。一种是以localtime表示的,一种是以UTC表示的。具体查看的方式可以通过hwclock –debug,该命令可以输出当前硬件时间的表示形式。

 

下面例举各种情况下系统时间的变化:

1.hwclock设定为localtime/etc/sysconf/clock 中的 UTC=true时,重启后系统时间后相对于BIOS时间被提前8个小时。

2.hwclock设定为localtime/etc/sysconf/clock中的 UTC=false时,重启后系统时间相对于BIOS时间没有变化

3.hwclock设定为UTC/etc/sysconf/clock 中的 UTC=true时,重启后系统时间后相对于BIOS时间无变化

4.hwclock设定为UTC/etc/sysconf/clock 中的 UTC=false时,重启后系统时间后相对于BIOS时间被推后8个小时。

如下图所示:

 

/etc/sysconf/clockUTC=true

/etc/sysconf/clockUTC=false

硬件时间 localtime

重启后系统时间后相对于BIOS时间被提前8个小时

系统时间无变化

硬件时间 UTC

系统时间无变化

重启后系统时间后相对于BIOS时间被推后8个小时

 

可见,当BIOS时间设置的类型和 /etc/sysconf/clock中的设置不一致时,就会导致系统启动时的系统时间错误。

 

如果有脚本实现时间同步,但是系统启动之后运行的。虽然时间同步可以将系统时间同步到正确时间,但是由于之前的系统时间错误设定,将会出现一个错误的时间间隔,这个时间间隔可能会对依赖系统时间的程序产生影响。

对策:出现这种问题的根本原因是硬件时间的类型和 /etc/sysconf/clock中的设置不一致。所以我们将在时间同步脚本中增加对硬件时间的同步,这样可以解决这种问题。

注:

UTC时间:世界协调时间(Universal Time Coordinated,UTC) ,也就是0时区的时间

CST时间:CST China Standard Time UTC+8:00 中国沿海时间(北京时间),这是我们所属时区的localtime

 

 

 

2.关于时区的设置:

为保证时间的正确,应该把时区设置正确。设置正确仅是为了使得时间更好理解和其他方面的维护。

 

设置方法:

1.       手动设置时区:

例如:设置东八区的时间

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

                编辑/etc/sysconfig/clock中 ZONE="Asia/Shanghai"

 

2.        使用图形化命令设置

system-config-date (大部分情况仅限于RedHatCentOS)或者使用 tzselect,按照命令提示进行即可。

### 修改系统时间后是否需要重启系统原因及操作步骤 #### 1. 修改系统时间和硬件时钟的影响 在 Linux 系统中,存在两个独立的时间管理机制:系统时钟(由内核维护)和硬件时钟(存储在 BIOS 或 CMOS 中)。当系统启动时,内核会读取硬件时钟以初始化系统时钟。如果仅修改了系统时间而未同步到硬件时钟,在系统重启后,硬件时钟的时间会被重新加载,从而覆盖之前设置的系统时间[^1]。 #### 2. 是否需要重启系统 通常情况下,修改系统时间并同步到硬件时钟后,不需要立即重启系统。然而,如果希望确保时间更改在整个系统中生效,尤其是在某些依赖时间的服务或应用程序中,重启可能是一个更稳妥的选择。例如,某些定时任务或日志记录功能可能会受到时间变化的影响。 #### 3. 操作步骤 以下是修改系统时间并同步到硬件时钟的操作步骤: - **修改系统时间** 使用 `date` 命令设置新的系统时间: ```bash sudo date -s "YYYY-MM-DD HH:MM:SS" ``` 例如,将时间设置为 2024 年 1 月 1 日上午 12:00:00: ```bash sudo date -s "2024-01-01 12:00:00" [^1] ``` - **将系统时间写入硬件时钟** 使用 `hwclock` 命令将当前系统时间同步到硬件时钟: ```bash sudo hwclock --systohc [^1] ``` 或者: ```bash sudo hwclock -w [^1] ``` - **验证硬件时钟时间** 查看硬件时钟以确认时间是否正确同步: ```bash sudo hwclock -r [^1] ``` #### 4. 特殊情况下的重启需求 在以下情况下,建议重启系统以确保时间更改完全生效: - 如果系统配置了自动时间同步服务(如 NTP),手动修改时间可能会被覆盖。在这种情况下,暂停 NTP 服务并完成时间修改后,可以重启以恢复服务。 - 如果某些关键服务或应用程序依赖于准确的时间戳,重启可以确保它们使用最新的时间设置。 #### 5. 示例流程 假设需要将系统时间设置为 2024 年 1 月 1 日中午 12 点,并同步到硬件时钟,具体操作如下: - 设置系统时间: ```bash sudo date -s "2024-01-01 12:00:00" ``` - 同步到硬件时钟: ```bash sudo hwclock --systohc ``` - 验证硬件时钟: ```bash sudo hwclock -r ``` #### 6. 注意事项 - 如果系统启用了 NTP 时间同步服务,建议在修改时间前暂停服务,以避免冲突: ```bash sudo systemctl stop ntpd.service [^1] ``` 修改完成后,可以重新启动 NTP 服务: ```bash sudo systemctl start ntpd.service [^1] ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值