因为今天在集群193跑程序的时候发现时间不同步, 因此想想把集群的时间全部同步一下
-
在Linux中设置系统时间,可以用date命令:
1
2
3
4查看时间
date
修改时间
date -s "20140225 20:16:00" #yyyymmdd hh:mm:ss -
Linux硬件时间的设置
硬件时间的设置,可以用hwclock或者clock命令。两者基本相同,只用一个就行,只不过clock命令除了支持x86硬件体系外,还支持Alpha硬件体系。
- 系统时间和硬件时间的同步
同步系统时间和硬件时间,可以使用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 | remote refid st t when poll reach delay offset jitter |
可以看到*号标出的就是集群正在同步的时钟服务器: 120.25.115.20是阿里云
由于不能同时使用, 而ntpdate的稳定性不好, 因此ntpdate用来一次性同步时间(或者ntpdate+cron组合)、或者用ntpdate同步一次时间后,持续用ntpd服务器来同步。
下面使用ntpdate来同步时间:使用ntpdate前, 先将ntpd关闭: service ntpd stop
或sudo systemctl stop ntp
1 | /usr/sbin/ntpdate time.stdtime.gov.tw |
确认防火墙没有问题后,执行域名解析,发现失败
1 | nslookup time.stdtime.gov.tw |
尝试ping外网,以确认能正常连到外网,连网正常
1 | ping 8.8.8.8 |
于是修改DNS文件, /etc/resolv.conf, 虽然这边提示不要手动修改, 但是临时改掉是没问题的
1 | Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) |
修改后,再次执行时间同步,ok鸟!
1 | apollo3d@apollo15:~/cl/Python_project/cplm/Min38$ sudo ntpdate ntp1.aliyun.com |
除了阿里云的还有pool.ntp.org可以用来同步。
▲但是同步之后时间还是不太对, 于是观察时区, 发现集群两台电脑上其实只是时区是不同的, 同步的服务器都是一样的阿里云的。
1 | apollo3d@apollo2:~$ date |
发现一个是EST和CST。网上查询得知 EST代表英国时间, CST代表北京时间, EDT:指美国东部夏令时间
那么现在只要改成北京时间的时区CST就可以了,修改如下:
1 | [root@localhost ~]# mv /etc/localtime /etc/localtime.bak |
但是发现两台语言不一样, 一个是中文, 一个是英文, 猜测是操作系统中英版导致的: 输出环境变量:
1 | apollo3d@apollo2:~$ date |
因此可以修改LANG:
1 | sudo vim /etc/sysconfig/i18n |
再运行我的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.