1 简单同步同步单服务器shell脚本#shell 文件名syndate.sh if [ $# 1 ];then echo 使用的时间服务器为$1 syndate$(ssh $1 date %Y-%m-%d %H:%M:%S) echo 同步的时间为${syndate} sudo date -s $syndate sudo hwclock --systohc echo 时间同步完成 else echo 请输入需要使目标用时间的linux服务器ip;如./syndate root127.0.0.1,即是使用当前服务器时间同步为当前服务器时间; fi使用案例需修改时间的服务器127.8.8.8目标时间服务器127.8.8.9在shell文件路径下执行指令./syndate.sh root127.8.8.92 同步多台服务器时间##syndate.sh ##./syndate.sh use_useruse_host synuser1synhost1 synuser2synhost2 ......... if [ $# 1 ];then echo 使用的时间服务器为$1 syndate$(ssh $1 date %Y-%m-%d %H:%M:%S) echo 同步的时间为${syndate} sudo date -s $syndate sudo hwclock --systohc if (( $? 0 )); then echo 时间同步完成 fi else if [ $# -ge 2 ];then i1 tep1 temppath dateosroot127.0.0.1 for param in $* do echo -e \r\n${param}\r\n if (( $i 1 )); then dateos${param} echo -e 时间服务器(userhost)为:${dateos} fi if [ $i -ge 2 ]; then syndate$(ssh ${dateos} date %Y-%m-%d %H:%M:%S) echo -e 同步时间为:${syndate}\r\n请输入${param}密码\r\n ssh ${param} sudo date -s \${syndate}\; sudo hwclock --systohc if (( $? 0 )); then echo 时间同步完成 fi #rsync -v syndate.sh ${param} ${temppath} #ssh ${param} cd ${temppath};sudo chmod 775 syndate.sh;./syndate.sh ${dateos} fi i$((${i}${tep})) done else echo -e 请输入需要使目标用时间的linux服务器ip;如./syndate.sh use_useruse_host synuser1synhost1 synuser2synhost2 .........\r\n ./syndate.sh 时间服务器用户时间服务器密码 需同步时间的服务器用户需同步时间的服务器密码 .........; fi if [ $# 0 ];then echo -e 请输入需要使目标用时间的linux服务器ip;如./syndate root127.0.0.1,即是使用当前服务器时间同步为当前服务器时间\r\n 或者./syndate.sh use_useruse_host synuser1synhost1 synuser2synhost2 .........; fi fi使用案例第一个参数为时间服务器ssh连接后面的参数为需要同步的服务器ssh连接可以多个连接的用户需要具有sudo免密权限或直接使用root用户Chrony方式Centos7默认除了上面的方式还可使用 Chrony 进行同步Chrony的支持相对来说更稳定在 CentOS 7 中推荐使用默认的chrony服务来同步时间。1. 检查当前时间状态首先查看系统当前的日期、时间和时区设置。timedatectl status请关注以下几行输出Local time: 显示本地时间。Time zone: 显示时区。如果需要使用北京时间请确保是Asia/Shanghai。NTP enabled: 显示yes表示已启用 NTP 同步。NTP synchronized: 显示yes表示系统时间已成功同步。如果时区不是北京时间可以使用以下命令进行设置timedatectl set-timezone Asia/Shanghai2. 配置 chrony 服务CentOS 7 默认使用chrony作为时间同步服务它比传统的ntpd更快、更精确。1.安装 chrony(如果尚未安装)yum install -y chrony2.编辑配置文件打开/etc/chrony.conf文件vi /etc/chrony.conf为了获得更好的同步速度建议将默认的服务器注释掉并添加国内的 NTP 服务器例如阿里云或院内自己的时间服务器。在文件中添加server ntp.aliyun.com iburstiburst选项表示在启动时快速同步时间。3.启动并设置开机自启systemctl start chronyd systemctl enable chronyd3.强制同步时间如果系统时间与标准时间偏差较大chrony可能需要较长时间来逐步调整。您可以使用以下命令强制立即同步chronyc -a makestep4.验证同步状态可以使用以下命令来检查时间同步的状态和详情查看同步源状态chronyc sources -v输出中带有*或标记的服务器表示正在使用或可用。查看同步详情chronyc tracking查看Last offset最近一次时间偏差和RMS offset平均偏差数值越小表示同步越精确。如果时间服务器开启了防火墙需要放行 NTP 服务使用 UDP 123 端口。firewall-cmd --add-servicentp --permanent firewall-cmd --reload5.查看 Chrony 服务日志chronyd 的日志主要通过 journalctl 命令来查看这是最直接有效的方法。实时跟踪日志使用 -f 参数可以实时监控 chronyd 服务的日志输出方便观察其运行状态和同步行为。sudo journalctl -u chronyd -f查看本次启动以来的日志如果你想查看从 chronyd 服务本次启动后的所有日志可以使用sudo journalctl -u chronyd -b查看最近的日志条目使用 -n 参数可以快速查看最近的日志例如查看最近的 50 行sudo journalctl -u chronyd -n 50查看 Chrony 专用日志文件除了系统日志chronyd 也可以将详细的测量和统计信息记录到专用文件中。检查配置文件首先需要确认 chronyd 是否配置了记录日志。请检查 /etc/chrony.conf 文件查看是否有 logdir 指令。cat /etc/chrony.conf | grep logdir如果配置了通常会指向 /var/log/chrony 目录。查看日志内容如果存在日志目录你可以查看其中的文件例如 measurements.log它记录了每次轮询的详细数据。sudo cat /var/log/chrony/measurements.log或者实时跟踪sudo tail -f /var/log/chrony/measurements.logNtpd方式Centos6默认ntpd与相似的ntpdate都是较老的方式但旧版本中一般推荐使用的是ntpd而不使用ntpdate定时执行。如果确实使用了ntpdate定时crontab执行需要注意定时任务执行的权限、环境变量问题避免任务触发执行后不生效cron 运行时的环境变量极其精简默认的 PATH 通常只有 /usr/bin:/bin 最好在定时器中显式指定环境变量如在开头增加PATH/sbin:/bin:/usr/sbin:/usr/bin核心区别对比表特性ntpd (守护进程)ntpdate (命令行工具)运行模式后台守护进程持续运行一次性命令执行完即退出同步方式平滑调整 (Slewing)通过微调时钟频率慢慢修正时间步进跳变 (Stepping)直接将系统时间修改为目标时间时间连续性连续时间不会倒退或突变对应用安全可能断裂时间可能突然变快或变慢可能导致应用异常精度极高 (毫秒/微秒级)能补偿硬件时钟漂移一般 (秒级)仅校准当前时刻不修正频率资源占用较高 (持续占用内存和CPU)极低 (仅在运行时占用)主要用途生产环境服务器的长期时间维护系统启动时的快速初始化校准状态推荐 (主流标准)已废弃 (Deprecated)1.安装软件包名称 安装时软件包的名称就是 ntp不带 d但守护进程的名字是 ntpd。安装命令yum install ntp防火墙 如果你配置 CentOS 6 作为 NTP 服务器记得在 iptables 中开放 UDP 123 端口。硬件时钟同步 在 CentOS 6 中如果需要 ntpd 同时更新硬件时钟BIOS时间通常需要编辑 /etc/sysconfig/ntpd 文件设置 SYNC_HWCLOCKyes2.常用指令修改 NTP 服务器配置1编辑配置文件使用文本编辑器如 vi 或 nano打开 NTP 的主配置文件。建议先备份原文件。sudo cp /etc/ntp.conf /etc/ntp.conf.bak sudo vi /etc/ntp.conf2修改服务器地址在文件中找到以 server 开头的行。这些就是当前配置的 NTP 服务器。注释掉 默认的服务器地址在行首添加 #。添加 你想要使用的新 NTP 服务器 IP 或域名。建议配置 3-4 个不同的服务器以提高可靠性。iburst 参数可以加速首次同步。修改前可能长这样server 0.centos.pool.ntp.org iburstserver 1.centos.pool.ntp.org iburst修改后以阿里云 NTP 服务器为例# server 0.centos.pool.ntp.org iburst# server 1.centos.pool.ntp.org iburstserver ntp1.aliyun.com iburstserver ntp2.aliyun.com iburstserver ntp3.aliyun.com iburst配置文件修改完成后需要重启ntpd服务来加载新的配置sudo systemctl restart ntpd立即同步时间#参数解释-g 允许在任何时间偏差下同步-q 表示同步一次后立即退出就像 ntpdate 一样 sudo ntpd -gq启动服务sudo service ntpd start重启服务修改配置后sudo service ntpd restart查看服务状态sudo service ntpd status设置开机自启sudo chkconfig ntpd on查看同步状态ntpq -p注意事项特性CentOS 6CentOS 7默认时间服务ntpd(NTP Daemon)chronyd(Chrony Daemon)配置文件路径/etc/ntp.conf/etc/chrony.conf服务管理命令service ntpd start/stop/restartsystemctl start/stop/restart chronyd开机自启设置chkconfig ntpd onsystemctl enable chronyd不管是chrony、ntpd还是ntpdate的方式同一台服务器中只能选用其中一种方式它们都是使用时间同步服务的端口123默认端口。例如ntpd在用使用dtpdate执行时将会失败报错端口正在被使用例如下错误输出ntpdate[93311]: the NTP socket is in use, exiting当不知道端口正在被谁占用时可使用如下方法查询sudo lsof -i :123 # 或者 sudo ss -ulpn | grep :123