systemd 开机时间_使用systemd控制您的计算机时间和日期

systemd 开机时间

大多数人都在关注时间。 我们及时起床执行早晨的礼节并上下班(如今,对于我们中的许多人来说这是短途旅行),休息一下午餐,在项目截止日期之前,庆祝生日和假期,乘飞机等等等等。 。

我们中有些人甚至痴迷于时间。 我的手表是太阳能供电的,并通过位于科罗拉多州柯林斯堡的美国国家标准技术研究院 (NIST)的WWVB时间信号广播电台获取确切的时间。 时间信号同步到同样位于柯林斯堡的原子钟。 我的Fitbit同步到我的手机,该手机同步到网络时间协议 (NTP)服务器,该服务器最终同步到原子钟。

为什么时间对计算机很重要

我们的设备和计算机需要准确的时间有很多原因。 例如,在银行,股票市场和其他金融业务中,必须以正确的顺序维护交易,并且准确的时间顺序对此至关重要。

我们的手机,平板电脑,汽车,GPS系统和计算机都需要精确的时间和日期设置。 我希望计算机桌面上的时钟正确,因此我可以依靠本地日历应用程序在正确的时间弹出提醒。 正确的时间还可以确保SystemV cron作业和systemd计时器在正确的时间触发。

正确的时间对于日志记录也很重要,因此根据时间来定位特定的日志条目要容易一些。 例如,我曾经在北卡罗来纳州电子邮件系统的DevOps中工作(当时还没有被称为该工作)。 我们过去每天处理超过2000万封电子邮件。 当相关计算机保持准确时间时,通过电子邮件跟踪一系列服务器,或通过使用地理位置分散的主机上的日志文件来确定事件的确切顺序会容易得多。

多次

Linux主机需要考虑两次:系统时间和RTC时间。 RTC代表实时时钟,它是系统硬件时钟的一个奇特的名称,并非特别准确。

通过使用系统主板上的电池,即使关闭计算机,硬件时钟也可以连续运行。 RTC的主要功能是保留与时间服务器的连接不可用时的时间。 在个人计算机的黑暗时代,没有互联网可以连接到时间服务器,因此计算机唯一可用的时间是内部时钟。 操作系统必须在启动时依赖RTC,并且用户必须使用硬件BIOS配置界面手动设置系统时间以确保正确。

硬件时钟不了解时区的概念; 只有时间存储在RTC中,而不是时区或与UTC(通用协调时间,也称为GMT或格林威治标准时间)的偏差。 您可以使用本文稍后将探讨的工具设置RTC。

系统时间是操作系统已知的时间。 它是您在桌面上的GUI时钟上,在date命令的输出中,在日志的时间戳中以及在文件访问,修改和更改时间中看到的时间。

rtc手册页包含有关RTC和系统时钟以及RTC功能的更完整讨论。

NTP呢?

全球各地的计算机都使用NTP(网络时间协议)通过NTP服务器层次结构将其时间与Internet标准参考时钟同步。 主要时间服务器位于第1层,它们通过卫星,无线电甚至调制解调器通过电话线直接连接到第0层的各种国家时间服务。 在第0层的时间服务可以是原子钟,调谐到原子钟广播的信号的无线电接收机,或者是使用GPS卫星广播的高精度时钟信号的GPS接收机。

NTP实施选项

最初的NTP实现是ntpd ,并且它又加入了两个新的chronydsystemd-timesyncd 。 这三者均使本地主机的时间与NTP时间服务器保持同步。 systemd-timesyncd服务不如chronyd健壮,但对于大多数目的而言已足够。 如果RTC不同步,它可以执行较大的时间跳动;如果本地系统时间稍有偏移,它可以逐渐调整系统时间以与NTP服务器保持同步。 systemd-timesync服务不能用作时间服务器。

Chrony是一个NTP实现,包含两个程序:chronyd守护程序和一个名为chronyc的命令行界面。 正如我在上一篇文章中所解释的,Chrony具有一些使其成为许多环境的最佳选择的功能,主要是:

  • Chrony可以比旧的ntpd服务更快地同步到时间服务器。 这对于不能持续运行的笔记本电脑或台式机很有用。
  • 它可以补偿时钟频率的波动,例如主机Hibernate或进入睡眠模式时,或者由于频率步进而导致时钟速度变化时,当负载较低时,频率步进会降低时钟速度。
  • 它处理间歇性的网络连接和带宽饱和。
  • 它针对网络延迟和延迟进行调整。
  • 初始时间同步后,Chrony永远不会停止计时。 这样可以确保许多系统服务和应用程序具有稳定且一致的时间间隔。
  • 即使没有网络连接,Chrony也可以正常工作。 在这种情况下,可以手动更新本地主机或服务器。
  • Chrony可以充当NTP服务器。

需要明确的是,NTP是在Linux主机上使用Chrony或systemd-timesyncd.service实现的协议。

NTP,Chrony和systemd-timesyncd RPM软件包可在标准Fedora存储库中获得。 systemd-udev RPM是基于规则的设备节点和内核事件管理器,默认情况下已与Fedora一起安装但未启用。

您可以安装所有三个组件并在它们之间切换,但这很痛苦,也不值得为此烦恼。 Fedora,CentOS和RHEL的现代版本已从NTP迁移到Chrony,作为它们的默认计时实现,并且它们还安装了systemd-timesyncd。 我发现Chrony运作良好,提供了比NTP服务更好的界面,提供了更多信息,并增强了控制能力,这些都是sysadmin的优势。

禁用其他NTP服务

NTP服务可能已在您的主机上运行。 如果是这样,则需要在切换到其他选项之前将其禁用。 我一直在使用chronyd,因此我使用了以下命令来停止和禁用它。 对主机上使用的任何NTP守护程序运行适当的命令:


   
     
     
     
     
[ root @ testvm1 ~ ] # systemctl disable chronyd ; systemctl stop chronyd
Removed / etc / systemd / system / multi-user.target.wants / chronyd.service.
[ root @ testvm1 ~ ] #

验证它是否已停止和禁用:


   
     
     
     
     
[ root @ testvm1 ~ ] # systemctl status chronyd
● chronyd.service - NTP client / server
     Loaded: loaded ( / usr / lib / systemd / system / chronyd.service; disabled; vendor preset: enabled )
     Active: inactive ( dead )
       Docs: man:chronyd ( 8 )
             man:chrony.conf ( 5 )
[ root @ testvm1 ~ ] #

开始之前检查状态

systemd timesync的状态指示systemd是否已启动NTP服务。 由于尚未启动systemd NTP,因此timesync-status命令不返回任何数据:


   
     
     
     
     
[ root @ testvm1 ~ ] # timedatectl timesync-status
Failed to query server: Could not activate remote peer.

但是直接的status请求提供了一些重要信息。 例如,不带参数或选项的timedatectl命令将status子命令默认为:


   
     
     
     
     
[ root @ testvm1 ~ ] # timedatectl status
           Local time: Fri 2020 -05- 15 08: 43 : 10 EDT  
           Universal time: Fri 2020 -05- 15 12 : 43 : 10 UTC  
                 RTC time: Fri 2020 -05- 15 08: 43 :08      
                Time zone: America / New_York ( EDT, -0400 )
System clock synchronized: no                          
              NTP service: inactive                    
          RTC in local TZ: yes                    

Warning: The system is configured to read the RTC time in the local time zone.
         This mode cannot be fully supported. It will create various problems
         with time zone changes and daylight saving time adjustments. The RTC
          time is never updated, it relies on external facilities to maintain it.
         If at all possible, use RTC in UTC by calling
          'timedatectl set-local-rtc 0' .
[ root @ testvm1 ~ ] #

这将返回主机的本地时间,UTC时间和RTC时间。 它显示系统时间设置为America/New_York时区( TZ ),RTC设置为本地时区的时间,并且NTP服务未激活。 RTC时间已经开始偏离系统时间。 对于时钟未同步的系统,这是正常现象。 主机上的漂移量取决于自上次同步系统以来的时间量以及每单位时间的漂移速度。

还有一条关于将本地时间用于RTC的警告消息-这与时区更改和夏令时调整有关。 如果需要进行更改时计算机处于关闭状态,则RTC时间不会更改。 在24/7开机的服务器或其他主机中这不是问题。 此外,任何提供NTP时间同步的服务都将确保在启动过程中尽早将主机设置为正确的时间,因此在主机完全启动并运行之前它将是正确的。

设定时区

通常,您可以在安装过程中设置计算机的时区,而无需更改它。 但是,有时需要更改时区,并且有一些工具可以提供帮助。 Linux使用时区文件来定义主机使用的本地时区。 这些二进制文件位于/usr/share/zoneinfo目录中。 我的时区的默认设置是通过链接/etc/localtime -> ../usr/share/zoneinfo/America/New_York 。 但是您不必知道更改时区。

但是您确实需要知道您所在位置的官方时区名称。 假设您要将时区更改为洛杉矶:


   
     
     
     
     
[ root @ testvm2 ~ ] # timedatectl list-timezones | column
< SNIP >
America / La_Paz                  Europe / Budapest
America / Lima                    Europe / Chisinau
America / Los_Angeles             Europe / Copenhagen
America / Maceio                  Europe / Dublin
America / Managua                 Europe / Gibraltar
America / Manaus                  Europe / Helsinki
< SNIP >

现在您可以设置时区。 我使用date命令来验证更改,但是您也可以使用timedatectl


   
     
     
     
     
[ root @ testvm2 ~ ] # date
Tue 19 May 2020 04: 47 : 49 PM EDT
[ root @ testvm2 ~ ] # timedatectl set-timezone America/Los_Angeles
[ root @ testvm2 ~ ] # date
Tue 19 May 2020 01: 48 : 23 PM PDT
[ root @ testvm2 ~ ] #

现在,您可以将主机的时区更改回本地时区。

系统时间同步

systemd timesync守护程序提供了一个NTP实现,该实现易于在systemd上下文中进行管理。 默认情况下,它已安装在Fedora和Ubuntu中,默认情况下已在Ubuntu中启动,但未在Fedora中启动。 我不确定其他发行版; 您可以使用以下方法检查您的:

 [ root @ testvm1 ~ ] # systemctl status systemd-timesyncd 

配置systemd-timesyncd

systemd-timesyncd的配置文件是/etc/systemd/timesyncd.conf 。 这是一个简单的文件,包含的选项少于旧的NTP服务和chronyd。 以下是我的Fedora VM上此文件默认版本的完整内容:


   
     
     
     
     
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.

[ Time ]
#NTP=
#FallbackNTP=0.fedora.pool.ntp.org 1.fedora.pool.ntp.org 2.fedora.pool.ntp.org 3.fedora.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

除注释外,它包含的唯一部分是[Time] ,所有行都被注释掉了。 这些是默认值,不需要更改或取消注释(除非您有某些理由要这样做)。 如果您在NTP=行中没有定义特定的NTP时间服务器,则Fedora的默认设置是回退到Fedora时间服务器池中。 我想将网络上的时间服务器添加到此行:

 NTP =myntpserver 

开始时间同步

启动和启用systemd-timesyncd就像其他任何服务一样:


   
     
     
     
     
[ root @ testvm2 ~ ] # systemctl enable systemd-timesyncd.service
Created symlink / etc / systemd / system / dbus-org.freedesktop.timesync1.service → / usr / lib / systemd / system / systemd-timesyncd.service.
Created symlink / etc / systemd / system / sysinit.target.wants / systemd-timesyncd.service → / usr / lib / systemd / system / systemd-timesyncd.service.
[ root @ testvm2 ~ ] # systemctl start systemd-timesyncd.service
[ root @ testvm2 ~ ] #

设置硬件时钟

这是启动timesyncd后我的系统之一:


   
     
     
     
     
[ root @ testvm2 systemd ] # timedatectl
               Local time: Sat 2020 -05- 16 14 : 34 : 54 EDT  
           Universal time: Sat 2020 -05- 16 18 : 34 : 54 UTC  
                 RTC time: Sat 2020 -05- 16 14 : 34 : 53      
                Time zone: America / New_York ( EDT, -0400 )
System clock synchronized: yes                          
              NTP service: active                      
          RTC in local TZ: no    

RTC时间与本地时间(EDT)大约相差一秒钟,并且在接下来的几天中,差异还会增加几秒钟。 因为RTC没有时区的概念,所以timedatectl命令必须进行比较以确定哪个时区是匹配的。 如果RTC时间与本地时间不完全匹配,则认为该时间不在本地时区。

为了寻找更多信息,我检查了systemd-timesync.service的状态并发现:


   
     
     
     
     
[ root @ testvm2 systemd ] # systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded ( / usr / lib / systemd / system / systemd-timesyncd.service; enabled; vendor preset: disabled )
     Active: active ( running ) since Sat 2020 -05- 16 13 : 56 : 53 EDT; 18h ago
       Docs: man:systemd-timesyncd.service ( 8 )
   Main PID: 822 ( systemd-timesyn )
     Status: "Initial synchronization to time server 163.237.218.19:123 (2.fedora.pool.ntp.org)."
      Tasks: 2 ( limit: 10365 )
     Memory: 2.8M
        CPU: 476ms
     CGroup: / system.slice / systemd-timesyncd.service
             └─ 822 / usr / lib / systemd / systemd-timesyncd

May 16 09: 57 : 24 testvm2.both.org systemd [ 1 ] : Starting Network Time Synchronization...
May 16 09: 57 : 24 testvm2.both.org systemd-timesyncd [ 822 ] : System clock time unset or jumped backwards, restoring from recorded timestamp: Sat 2020 -05- 16 13 : 56 : 53 EDT
May 16 13 : 56 : 53 testvm2.both.org systemd [ 1 ] : Started Network Time Synchronization.
May 16 13 : 57 : 56 testvm2.both.org systemd-timesyncd [ 822 ] : Initial synchronization to time server 163.237.218.19: 123 ( 2 .fedora.pool.ntp.org ) .
[ root @ testvm2 systemd ] #

注意日志消息,指出系统时钟时间未设置或向后跳转。 时间同步服务从时间戳设置系统时间。 时间戳记由timesync守护程序维护,并在每次成功的时间同步时创建。

timedatectl命令无法根据系统时钟设置硬件时钟的值; 它只能根据在命令行上输入的值来设置时间和日期。 但是,可以使用hwclock命令将RTC设置为与系统时间相同的值:


   
     
     
     
     
[ root @ testvm2 ~ ] # /sbin/hwclock --systohc --localtime
[ root @ testvm2 ~ ] # timedatectl
               Local time: Mon 2020 -05- 18 13 : 56 : 46 EDT  
           Universal time: Mon 2020 -05- 18 17 : 56 : 46 UTC  
                 RTC time: Mon 2020 -05- 18 13 : 56 : 46      
                Time zone: America / New_York ( EDT, -0400 )
System clock synchronized: yes                          
              NTP service: active                      
          RTC in local TZ: yes

--localtime选项可确保将硬件时钟设置为本地时间,而不是UTC。

您真的需要RTC吗?

任何NTP实施都将在启动过程中设置系统时钟,那么RTC是否必要? 并非如此,只要您与时间服务器建立网络连接即可。 但是,许多系统无法全时访问网络连接,因此硬件时钟非常有用,因此Linux可以读取它并设置系统时间。 与必须手动设置时间相比,这是一个更好的解决方案,即使它可能会偏离实际时间。

摘要

本文探讨了使用一些系统工具来管理日期,时间和时区。 systemd-timesyncd工具提供了一个不错的NTP客户端,可以将本地主机上的时间与NTP服务器同步。 但是,systemd-timesyncd不提供服务器服务,因此,如果您的网络上需要NTP服务器,则必须使用其他工具(例如Chrony)作为服务器。

我更喜欢对网络中的任何服务使用单一实现,因此我使用Chrony。 如果您不需要本地NTP服务器,或者您不介意与服务器处理Chrony事务,不与客户端进行systemd-timesyncd事务,并且不需要Chrony的其他功能,那么对于NTP客户端,systemd-timesyncd是一个有用的选择。

我还要提出另一点:您不必使用systemd工具来实现NTP。 您可以使用旧的ntpd或Chrony或其他一些NTP实现。 systemd由大量服务组成; 其中许多是可选的,因此可以将其禁用,并在其位置使用其他功能。 并非有人发现它是巨大的,整体的怪物。 可以不喜欢systemd或其中的一部分,这是可以的,但是您应该做出明智的决定。

我不喜欢systemd的NTP实现,但我更喜欢Chrony,因为它可以更好地满足我的需求。 这就是Linux的全部意义所在。

资源资源

互联网上有大量有关systemd的信息,但是很多信息简洁,晦涩甚至是误导。 除了本文提到的资源之外,以下网页还提供了有关systemd启动的更详细和可靠的信息。

  • Fedora项目对systemd有很好的实用指南 。 它具有使用systemd配置,管理和维护Fedora计算机所需的几乎所有知识。
  • Fedora项目还有一个很好的备忘单 ,可以将旧的SystemV命令与可比的systemd命令进行交叉引用。
  • 有关systemd及其创建原因的详细技术信息,请查看Freedesktop.org 对systemd的描述 。
  • Linux.com的“更多系统乐趣”提供了更多高级系统信息和技巧 。

还有systemd的设计师和主要开发者Lennart Poettering撰写的一系列针对Linux sysadmin的技术性文章。 这些文章是在2010年4月至2011年9月之间撰写的,但它们现在和那时一样具有相关性。 关于systemd及其生态系统的许多其他优点都基于这些论文。

  • 重新思考PID 1
  • 系统管理员,第一部分
  • 系统管理员,第二部分
  • 系统管理员,第三部分
  • 管理员专用的systemd,第IV部分
  • 系统管理员,第五部分
  • 管理员专用的systemd,第VI部分
  • 管理员专用系统,第七部分
  • 管理员专用的系统化第八部分
  • 管理员专用的systemd,第IX部分
  • 适用于管理员的systemd,第X部分
  • 管理员专用系统,第十一部分

翻译自: https://opensource.com/article/20/6/time-date-systemd

systemd 开机时间

你可能感兴趣的:(网络,linux,java,python,大数据)