命令行改时间:Linux/Windows双系统时间同步实战
上周调试一个分布式系统时,被服务器时间不同步坑得够呛。明明代码没问题,却因为几台机器的时间差导致数据对不上。今天就把我整理的命令行改时间方法分享出来,特别是双系统用户的时间同步技巧,绝对实用。
为什么命令行改时间更靠谱?
很多人习惯用图形界面改时间,但我在生产环境遇到过好几次GUI时间设置失效的情况。命令行方式不仅更可靠,还能写进脚本批量操作。记得有次给20台服务器同步时间,用for
循环配合ssh
十分钟就搞定了,这效率GUI根本比不了。
Linux系统时间设置
在Linux下改时间要分两步走:先用date
改系统时间,再用hwclock
同步到硬件时钟。这里有个坑要注意——直接改时间可能导致systemd-timesyncd
服务自动改回来。
# 先关闭时间同步服务
sudo timedatectl set-ntp false
# 设置新时间(格式:月日时分年.秒)
sudo date 010203042023.30
# 写入硬件时钟
sudo hwclock --systohc
我更喜欢用timedatectl
这个全能命令,它能同时处理时区和NTP设置:
sudo timedatectl set-time "2023-01-02 03:04:30"
Windows系统时间设置
Windows下用PowerShell改时间更简单,但需要管理员权限。有次帮同事调试,发现他用的普通用户权限,命令执行了却没生效,排查了半天才发现是权限问题。
# 管理员模式运行
Set-Date -Date "01/02/2023 03:04:30"
传统cmd用户可以用老命令:
time 03:04:30
date 01-02-2023
双系统时间同步的坑
装过双系统的同学肯定遇到过这个问题:进Windows发现时间快了8小时。这是因为Linux用UTC时间,Windows用本地时间。我的解决方案是让Windows也使用UTC:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTimeZoneInformation]
"RealTimeIsUniversal"=dword:00000001
或者在Linux里强制使用本地时间(不推荐):
sudo timedatectl set-local-rtc 1
自动同步网络时间
最后安利下NTP自动同步,这才是终极解决方案。我在所有服务器上都配置了:
# Linux安装chrony
sudo apt install chrony
sudo systemctl enable chronyd
# Windows配置NTP
w32tm /config /syncfromflags:manual /manualpeerlist:"pool.ntp.org"
net stop w32time && net start w32time
时间同步看似简单,但实际工作中很多诡异问题都是它引起的。建议大家把本文的命令保存成脚本,下次遇到时间问题直接拿来就用。如果你们还遇到过其他时间相关的坑,欢迎在评论区分享~
学到了!之前双系统时间问题困扰我好久,原来Windows可以直接改注册表解决。
有没有人试过在macOS下同步时间?一直用Linux和macOS双系统,时间总是不一致。