Mrli
别装作很努力,
因为结局不会陪你演戏。
Contacts:
QQ博客园

Linux服务器同步时钟

2020/11/22 Linux
Word count: 1,461 | Reading time: 7min

因为今天在集群193跑程序的时候发现时间不同步, 因此想想把集群的时间全部同步一下

  1. 在Linux中设置系统时间,可以用date命令:

    1
    2
    3
    4
    # 查看时间
    $ date
    # 修改时间
    $ date -s "20140225 20:16:00" #yyyymmdd hh:mm:ss
  2. Linux硬件时间的设置

硬件时间的设置,可以用hwclock或者clock命令。两者基本相同,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系。

  1. 系统时间和硬件时间的同步

同步系统时间和硬件时间,可以使用hwclock命令。

4. 不同机器之间的时间同步

为了避免主机时间因为长期运行下所导致的时间偏差,进行时间同步(synchronize)的工作是非常必要的。Linux系统下,一般使用ntp服务器来同步不同机器的时间。一台机器,可以同时是ntp服务端和ntp客户端。在生产系统中,推荐使用像DNS服务器一样分层的时间服务器来同步时间。

不同机器间同步时间,可以使用ntpdate命令,也可以使用ntpd服务。==>▲. 注意两个不能同时使用: 如果使用了ntpd后还是用ntpdate会报错ntpdate[39462]: the NTP socket is in use, exiting, 要查询ntp的状态,用ntpq命令,比如看目前是否和ntp server同步,用ntpq -p

1
2
3
4
5
6
7
8
9
10
11
12
13
14
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
0.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
1.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
2.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
3.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
ntp.ubuntu.com .POOL. 16 p - 64 0 0.000 0.000 0.000
ntp1.ams1.nl.le 130.133.1.10 2 u 1 64 1 305.632 -43.387 0.146
*120.25.115.20 10.137.53.7 2 u 1 64 1 29.425 -1.059 0.410
203.107.6.88 100.107.25.114 2 u 1 64 1 32.056 -2.093 0.257
ntp.xtom.nl 84.199.11.211 2 u 1 64 1 175.286 -6.179 0.210
94.130.49.186 ( 195.13.23.5 3 u 2 64 1 212.348 -17.943 0.561
tock.ntp.infoma .GPS. 1 u 2 64 1 239.693 -11.135 0.175
119.28.206.193 100.122.36.196 2 u - 64 1 41.525 -4.034 0.002

可以看到*号标出的就是集群正在同步的时钟服务器: 120.25.115.20是阿里云

由于不能同时使用, 而ntpdate的稳定性不好, 因此ntpdate用来一次性同步时间(或者ntpdate+cron组合)、或者用ntpdate同步一次时间后,持续用ntpd服务器来同步。

下面使用ntpdate来同步时间:使用ntpdate前, 先将ntpd关闭: service ntpd stopsudo systemctl stop ntp

1
2
3
4
#  /usr/sbin/ntpdate  time.stdtime.gov.tw
Error : Temporary failure in name resolution
29 Oct 14:18:59 ntpdate[25327]: can't find host time.stdtime.gov.tw
29 Oct 14:18:59 ntpdate[25327]: no servers can be used, exiting

确认防火墙没有问题后,执行域名解析,发现失败

1
2
# nslookup  time.stdtime.gov.tw
;; connection timed out; no servers could be reached

尝试ping外网,以确认能正常连到外网,连网正常

1
2
3
4
5
6
7
# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=53 time=1.48 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=53 time=1.40 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 1.404/1.445/1.487/0.056 ms

于是修改DNS文件, /etc/resolv.conf, 虽然这边提示不要手动修改, 但是临时改掉是没问题的

1
2
3
4
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
#nameserver 127.0.1.1
nameserver 8.8.8.8

修改后,再次执行时间同步,ok鸟!

1
2
apollo3d@apollo15:~/cl/Python_project/cplm/Min38$ sudo ntpdate ntp1.aliyun.com
21 Nov 23:04:25 ntpdate[40285]: adjust time server 120.25.115.20 offset 0.002194 se

除了阿里云的还有pool.ntp.org可以用来同步。

▲但是同步之后时间还是不太对, 于是观察时区, 发现集群两台电脑上其实只是时区是不同的, 同步的服务器都是一样的阿里云的。

1
2
3
4
5
apollo3d@apollo2:~$ date
2020年 11月 22日 星期日 12:14:11 CST

apollo3d@apollo15:~/cl/Python_project/cplm/Min38$ date
Sat Nov 21 23:14:01 EST 2020

发现一个是EST和CST。网上查询得知 EST代表英国时间, CST代表北京时间, EDT:指美国东部夏令时间

那么现在只要改成北京时间的时区CST就可以了,修改如下:

1
2
3
[root@localhost ~]# mv /etc/localtime /etc/localtime.bak
[root@localhost ~]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@localhost ~]# date

但是发现两台语言不一样, 一个是中文, 一个是英文, 猜测是操作系统中英版导致的: 输出环境变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apollo3d@apollo2:~$ date
2020年 11月 22日 星期日 12:14:11 CST
$ env
# 可以看到时区是中国
HOME=/home/apollo3d
LOGNAME=apollo3d
LESSCLOSE=/usr/bin/lesspipe %s %s
LC_TIME=zh_CN.UTF-8
LC_NAME=zh_CN.UTF-8
_=/usr/bin/env

apollo3d@apollo15:~/cl/Python_project/cplm/Min38$ date
Sat Nov 21 23:14:01 EST 2020
$ env
# 可以看到语言是en_US, 但是没设置时区
MAIL=/var/mail/apollo3d
PWD=/home/apollo3d/cl/Python_project/cplm/Min38
JAVA_HOME=/home/apollo3d/Apollo_Rescue/jdk1.8.0_161
LANG=en_US.UTF-8
HOME=/home/apollo3d
SUDO_COMMAND=/bin/su

因此可以修改LANG:

1
2
$ sudo vim /etc/sysconfig/i18n
LANG="en_US.UTF-8"改为LANG="zh_CN.GB2312"

再运行我的Python脚本的时候发现竟然报错了: ValueError: Timezone offset does not match system offset: -18000 != 28800. Please, check your config files.

因为系统时区和代码运行时区不一样导致。解决办法:在创建BlockingScheduler对象时指定上海的时区scheduler = BlockingScheduler(timezone="Asia/Shanghai")

Author: Mrli

Link: https://nymrli.top/2020/11/22/Linux服务器同步时钟/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
深度学习+Pytorch学习笔记
NextPost >
李宏毅机器学习_摘要
CATALOG
  1. 1.