如何使用timedatectl从命令行设置时区并启用网络时间同步(NTP)

本文介绍了如何使用timedatectl更改时区,以及如何使用Linux上的NTP(网络时间协议)与远程服务器自动同步系统时钟。
timedatectl是systemd的一部分,可作为命令行实用程序使用,它允许更改系统时钟的各种设置。

如何使用timedatectl在Linux上更改时区

在更改时区之前,请先使用timedatectl查找当前设置的时区(还显示有关系统时间设置的其他信息):
timedatectl

这与相同timedatectl status。

输出示例:

# timedatectl
               Local time: Sat 2020-09-12 19:14:59 CST
           Universal time: Sat 2020-09-12 11:14:59 UTC
                 RTC time: Sat 2020-09-12 11:14:59    
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no                         
              NTP service: inactive                   
          RTC in local TZ: no          

 

现在,让我们列出所有可用的时区,以便您知道将在系统上使用的时区的确切名称(更改时区的命令所需要):
timedatectl list-timezones

时区列表很大。您可以使用grep对其进行过滤,使其仅显示某个洲或某个国家/州的首都的时区,例如仅显示可能的欧洲时区:
timedatectl list-timezones | grep Shanghai

Asia/Shanghai


现在,使用以下命令在Linux系统上设置时区:
 

timedatectl set-timezone <timezone>


<timezone>所列出的时区 在哪里timedatectl list-timezones?例如,将Linux系统时区设置为Asia/Shanghai:

timedatectl set-timezone Asia/Shanghai


该命令为您从/usr/share/zoneinfo/到选择的时区创建符号链接/etc/localtime。您也可以手动创建此链接并实现相同的目的。在同一示例中,要将时区设置为Asia/Shanghai,/etc/localtime需要是的符号链接/usr/share/zoneinfo/Asia/Shanghai。

 

如何使用timedatectl将系统时钟与远程服务器同步(启用NTP)

首先使用timedatectl查找网络时间同步(NTP)服务是否处于活动状态,以及系统时钟是否已同步:
timedatectl

使用以下命令在Linux系统上启用NTP服务:

timedatectl set-ntp true

如果要禁用它,只需使用false代替true。

值得注意的是,如果未安装NTP服务,例如timesyncd,ntpd,Chrony或其他服务,此命令将失败。不过,在许多情况下,timesyncd应该默认安装(例如,默认情况下是在Ubuntu 16.04及更高版本中安装的)。

如果使用chrony或ntpd之类的服务进行更改,systemd-timedated则在重新启动之前,timedatectl不会显示这些内容:

systemctl restart systemd-timedated


在Ubuntu 18.04服务器上,我还必须重新启动systemd-timesyncd(例如,在我的Ubuntu 19.04或Solus OS系统上不需要此操作),否则系统时间将无法同步。如果您还使用timesyncd,并且timedatectl显示System clock synchronized:为no,即使NTP service显示为active,也可以重新启动systemd-timesyncd:

systemctl restart systemd-timesyncd


我还应该补充一点,当使用默认的systemd timesyncd服务时,您可以看到比timedatectl提供的更多信息,例如使用的NTP时间服务器,以及显示上一次执行同步的日志,其中包括:

systemctl status systemd-timesyncd


输出示例:

systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; disable>
     Active: active (running) since Sat 2020-09-12 19:21:43 CST; 4s ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 3518 (systemd-timesyn)
     Status: "Initial synchronization to time server 5.79.108.34:123 (0.opensus>
      Tasks: 2 (limit: 4915)
     Memory: 1.5M
     CGroup: /system.slice/systemd-timesyncd.service
             └─3518 /usr/lib/systemd/systemd-timesyncd

Sep 12 19:21:42 localhost systemd[1]: Starting Network Time Synchronization...
Sep 12 19:21:43 localhost systemd[1]: Started Network Time Synchronization.
Sep 12 19:21:43 localhost systemd-timesyncd[3518]: Initial synchronization to t


在systemd 239及更高版本上(例如,它在Ubuntu 18.04上不起作用,因为它使用systemd 237),您可以使用以下命令显示systemd-timesyncd状态timedatectl show-timesync:

timedatectl show-timesync
FallbackNTPServers=0.opensuse.pool.ntp.org 1.opensuse.pool.ntp.org 2.opensuse.pool.ntp.org 3.opensuse.pool.ntp.org
ServerName=0.opensuse.pool.ntp.org
ServerAddress=5.79.108.34
RootDistanceMaxUSec=5s
PollIntervalMinUSec=32s
PollIntervalMaxUSec=34min 8s
PollIntervalUSec=1min 4s
NTPMessage={ Leap=0, Version=4, Mode=4, Stratum=2, Precision=-24, RootDelay=17.211ms, RootDispersion=80.734ms, Reference=8285010A, OriginateTimestamp=Sat 2020-09-12 19:22:15 CST, ReceiveTimestamp=Sat 2020-09-12 19:22:15 CST, TransmitTimestamp=Sat 2020-09-12 19:22:15 CST, DestinationTimestamp=Sat 2020-09-12 19:22:16 CST, Ignored=no PacketCount=2, Jitter=3.787ms }
Frequency=-6368726


和属性systemd-timesyncd使用timedatectl timesync-status:

timedatectl timesync-status
       Server: 5.79.108.34 (0.opensuse.pool.ntp.org)
Poll interval: 1min 4s (min: 32s; max 34min 8s)     
         Leap: normal                               
      Version: 4                                    
      Stratum: 2                                    
    Reference: 8285010A                             
    Precision: 1us (-24)                            
Root distance: 89.339ms (max: 5s)                   
       Offset: -10.021ms                            
        Delay: 358.105ms                            
       Jitter: 3.787ms                              
 Packet count: 2                                    
    Frequency: -97.179ppm   


您可以通过编辑/etc/systemd/timesyncd.conf配置文件来更改此处显示的设置。例如,更改NTP服务器(您可以使用NTP Pool Project提供的服务器),取消NTP行注释,并添加要使用的服务器,并以空格分隔。更改配置文件后,重新启动systemd-timesyncd:

systemctl restart systemd-timesyncd

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 NTP网络时间协议)可以实现 Java 项目之间时间同步。以下是使用 NTP 同步时间的步骤: 1. 安装 NTP 服务。在 Linux 系统中,可以使用以下命令安装 NTP 服务:`sudo apt-get install ntp`。在 Windows 系统中,可以从官方网站下载安装包并安装。 2. 配置 NTP 服务器。在 Linux 系统中,可以编辑 `/etc/ntp.conf` 文件来配置 NTP 服务器。在 Windows 系统中,可以编辑 `C:\Windows\System32\drivers\etc\ntp.conf` 文件。在配置文件中,可以指定 NTP 服务器的 IP 地址、时区等信息。 3. 启动 NTP 服务。在 Linux 系统中,可以使用以下命令启动 NTP 服务:`sudo systemctl start ntp`。在 Windows 系统中,可以在服务管理器中启动 NTP 服务。 4. 在 Java 项目中使用 NTP。可以使用 Java NTP 客户端库来与 NTP 服务器通信,获取服务器时间。以下是使用 Apache Commons Net 库获取 NTP 时间的示例代码: ``` NTPUDPClient client = new NTPUDPClient(); client.open(); InetAddress hostAddr = InetAddress.getByName("ntp.server.com"); TimeInfo info = client.getTime(hostAddr); info.computeDetails(); long time = info.getMessage().getTransmitTimeStamp().getTime(); Date date = new Date(time); ``` 在示例代码中,`ntp.server.com` 是 NTP 服务器的地址,`client.getTime()` 方法会返回当前时间信息,`info.computeDetails()` 方法会计算时间信息的详细信息,`info.getMessage().getTransmitTimeStamp().getTime()` 方法会返回时间信息的时间戳,`new Date(time)` 方法会将时间戳转换为 Java 的 `Date` 类型。 通过以上步骤,就可以在 Java 项目中使用 NTP 实现时间同步了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值