#!/usr/bin/env bash # ============================ # Chrony 运维诊断工具 v2 # ============================ SERVICE="chronyd" CONF="/etc/chrony.conf" if systemctl list-unit-files | grep -q chrony.service; then SERVICE="chrony" fi pause(){ echo read -p "按回车返回菜单..." } header(){ clear echo "======================================" echo " Chrony 运维诊断工具 v2" echo "======================================" echo } # ---------------------------- # 基础信息 # ---------------------------- show_time(){ header echo "系统时间" echo "--------------------------------" date echo timedatectl pause } service_status(){ header echo "Chrony 服务状态" echo "--------------------------------" systemctl status $SERVICE --no-pager pause } # ---------------------------- # NTP信息 # ---------------------------- show_sources(){ header echo "NTP Sources" echo "--------------------------------" chronyc sources -v pause } show_tracking(){ header echo "Chrony Tracking" echo "--------------------------------" chronyc tracking pause } show_activity(){ header echo "Chrony Activity" echo "--------------------------------" chronyc activity pause } # ---------------------------- # 强制同步 # ---------------------------- force_sync(){ header echo "尝试强制同步时间..." echo chronyc -a makestep echo echo "同步命令已执行" pause } # ---------------------------- # 重启 # ---------------------------- restart_service(){ header echo "重启 Chrony..." echo systemctl restart $SERVICE echo "完成" pause } # ---------------------------- # 修改NTP服务器 # ---------------------------- change_ntp(){ header echo "当前 NTP server" grep ^server $CONF echo read -p "输入新的 NTP 服务器: " NTP if [ -z "$NTP" ]; then echo "未输入" pause return fi cp $CONF ${CONF}.bak.$(date +%s) sed -i '/^server/d' $CONF echo "server $NTP iburst" >> $CONF systemctl restart $SERVICE echo echo "已修改并重启 Chrony" pause } # ---------------------------- # 推荐NTP # ---------------------------- recommend_ntp(){ header echo "推荐 NTP 服务器 (中国常用)" echo "--------------------------------" cat < 0.5" | bc 2>/dev/null) -eq 1 ]]; then echo "警告: 偏差超过0.5秒" fi echo echo "诊断建议" echo "--------------------------------" if [ "$SERVICE_STATUS" != "active" ]; then echo "建议: 启动 chrony 服务" fi if [ "$SYNC" != "yes" ]; then echo "建议: 检查 NTP 源或网络" fi echo pause } # ---------------------------- # 完整报告 # ---------------------------- full_report(){ header echo "Chrony 完整诊断报告" echo "================================" echo echo "系统时间" echo "--------------------------------" date echo echo "timedatectl" echo "--------------------------------" timedatectl echo echo "tracking" echo "--------------------------------" chronyc tracking echo echo "sources" echo "--------------------------------" chronyc sources -v echo echo "activity" echo "--------------------------------" chronyc activity echo pause } # ---------------------------- # 主菜单 # ---------------------------- menu(){ while true do header echo "1 查看系统时间" echo "2 查看 Chrony 服务状态" echo "3 查看 Sources" echo "4 查看 Tracking" echo "5 查看 Activity" echo "6 强制同步时间" echo "7 修改 NTP 服务器" echo "8 重启 Chrony" echo "9 推荐 NTP 服务器" echo "10 Chrony 健康检查" echo "11 完整诊断报告" echo echo "0 退出" echo read -p "选择操作: " CHOICE case $CHOICE in 1) show_time ;; 2) service_status ;; 3) show_sources ;; 4) show_tracking ;; 5) show_activity ;; 6) force_sync ;; 7) change_ntp ;; 8) restart_service ;; 9) recommend_ntp ;; 10) health_check ;; 11) full_report ;; 0) exit ;; *) echo "无效选项"; sleep 1 ;; esac done } menu