chrony-tool.sh
· 4.2 KiB · Bash
Eredeti
#!/usr/bin/env bash
# ==============================
# Chrony 管理工具
# ==============================
CHRONY_CONF="/etc/chrony.conf"
SERVICE_NAME="chronyd"
if systemctl list-unit-files | grep -q chrony.service; then
SERVICE_NAME="chrony"
fi
pause(){
echo
read -p "按回车返回菜单..."
}
print_header(){
clear
echo "======================================"
echo " Chrony 时间同步管理工具"
echo "======================================"
echo
}
check_chrony_install(){
if ! command -v chronyc &>/dev/null; then
echo "未检测到 chrony,请先安装"
echo "CentOS/RHEL: yum install chrony"
echo "Debian/Ubuntu: apt install chrony"
exit 1
fi
}
# 当前时间
show_time(){
print_header
echo "系统当前时间"
echo "----------------------------"
date
echo
echo "timedatectl 信息"
echo "----------------------------"
timedatectl
pause
}
# Chrony服务状态
chrony_status(){
print_header
echo "Chrony 服务状态"
echo "----------------------------"
systemctl status $SERVICE_NAME --no-pager
pause
}
# Chrony源
show_sources(){
print_header
echo "NTP 来源服务器"
echo "----------------------------"
chronyc sources -v
pause
}
# Chrony tracking
show_tracking(){
print_header
echo "Chrony tracking 信息"
echo "----------------------------"
chronyc tracking
pause
}
# Chrony统计
show_activity(){
print_header
echo "Chrony 活动源"
echo "----------------------------"
chronyc activity
pause
}
# 强制同步
force_sync(){
print_header
echo "尝试立即同步时间..."
echo
chronyc -a makestep
echo
echo "同步完成"
pause
}
# 重启服务
restart_chrony(){
print_header
echo "重启 Chrony 服务..."
echo
sudo systemctl restart $SERVICE_NAME
echo "完成"
pause
}
# 查看配置
show_config(){
print_header
echo "当前 chrony.conf"
echo "----------------------------"
cat $CHRONY_CONF
pause
}
# 修改NTP服务器
modify_ntp(){
print_header
echo "当前 NTP server 配置"
echo "----------------------------"
grep ^server $CHRONY_CONF
echo
read -p "输入新的 NTP 服务器 (例如 ntp.aliyun.com): " ntpserver
if [ -z "$ntpserver" ]; then
echo "未输入"
pause
return
fi
sudo cp $CHRONY_CONF ${CHRONY_CONF}.bak.$(date +%s)
sudo sed -i '/^server/d' $CHRONY_CONF
echo "server $ntpserver iburst" | sudo tee -a $CHRONY_CONF >/dev/null
echo
echo "配置已更新"
echo "正在重启 chrony..."
sudo systemctl restart $SERVICE_NAME
echo "完成"
pause
}
# 综合检测
full_check(){
print_header
echo "系统时间"
echo "----------------------------"
date
echo
echo "timedatectl"
echo "----------------------------"
timedatectl
echo
echo "Chrony tracking"
echo "----------------------------"
chronyc tracking
echo
echo "Chrony sources"
echo "----------------------------"
chronyc sources -v
echo
echo "Chrony activity"
echo "----------------------------"
chronyc activity
pause
}
menu(){
while true
do
print_header
echo "1 查看系统时间"
echo "2 查看 Chrony 服务状态"
echo "3 查看 NTP 来源 (sources)"
echo "4 查看 Chrony tracking"
echo "5 查看 Chrony activity"
echo "6 强制同步时间"
echo "7 查看 chrony.conf"
echo "8 修改 NTP 服务器"
echo "9 重启 Chrony"
echo "10 综合检测"
echo
echo "0 退出"
echo
read -p "请选择操作: " choice
case $choice in
1) show_time ;;
2) chrony_status ;;
3) show_sources ;;
4) show_tracking ;;
5) show_activity ;;
6) force_sync ;;
7) show_config ;;
8) modify_ntp ;;
9) restart_chrony ;;
10) full_check ;;
0) exit ;;
*) echo "无效选项"; sleep 1 ;;
esac
done
}
check_chrony_install
menu
| 1 | #!/usr/bin/env bash |
| 2 | |
| 3 | # ============================== |
| 4 | # Chrony 管理工具 |
| 5 | # ============================== |
| 6 | |
| 7 | CHRONY_CONF="/etc/chrony.conf" |
| 8 | SERVICE_NAME="chronyd" |
| 9 | |
| 10 | if systemctl list-unit-files | grep -q chrony.service; then |
| 11 | SERVICE_NAME="chrony" |
| 12 | fi |
| 13 | |
| 14 | pause(){ |
| 15 | echo |
| 16 | read -p "按回车返回菜单..." |
| 17 | } |
| 18 | |
| 19 | print_header(){ |
| 20 | clear |
| 21 | echo "======================================" |
| 22 | echo " Chrony 时间同步管理工具" |
| 23 | echo "======================================" |
| 24 | echo |
| 25 | } |
| 26 | |
| 27 | check_chrony_install(){ |
| 28 | if ! command -v chronyc &>/dev/null; then |
| 29 | echo "未检测到 chrony,请先安装" |
| 30 | echo "CentOS/RHEL: yum install chrony" |
| 31 | echo "Debian/Ubuntu: apt install chrony" |
| 32 | exit 1 |
| 33 | fi |
| 34 | } |
| 35 | |
| 36 | # 当前时间 |
| 37 | show_time(){ |
| 38 | print_header |
| 39 | echo "系统当前时间" |
| 40 | echo "----------------------------" |
| 41 | date |
| 42 | echo |
| 43 | echo "timedatectl 信息" |
| 44 | echo "----------------------------" |
| 45 | timedatectl |
| 46 | pause |
| 47 | } |
| 48 | |
| 49 | # Chrony服务状态 |
| 50 | chrony_status(){ |
| 51 | print_header |
| 52 | echo "Chrony 服务状态" |
| 53 | echo "----------------------------" |
| 54 | systemctl status $SERVICE_NAME --no-pager |
| 55 | pause |
| 56 | } |
| 57 | |
| 58 | # Chrony源 |
| 59 | show_sources(){ |
| 60 | print_header |
| 61 | echo "NTP 来源服务器" |
| 62 | echo "----------------------------" |
| 63 | chronyc sources -v |
| 64 | pause |
| 65 | } |
| 66 | |
| 67 | # Chrony tracking |
| 68 | show_tracking(){ |
| 69 | print_header |
| 70 | echo "Chrony tracking 信息" |
| 71 | echo "----------------------------" |
| 72 | chronyc tracking |
| 73 | pause |
| 74 | } |
| 75 | |
| 76 | # Chrony统计 |
| 77 | show_activity(){ |
| 78 | print_header |
| 79 | echo "Chrony 活动源" |
| 80 | echo "----------------------------" |
| 81 | chronyc activity |
| 82 | pause |
| 83 | } |
| 84 | |
| 85 | # 强制同步 |
| 86 | force_sync(){ |
| 87 | print_header |
| 88 | echo "尝试立即同步时间..." |
| 89 | echo |
| 90 | |
| 91 | chronyc -a makestep |
| 92 | |
| 93 | echo |
| 94 | echo "同步完成" |
| 95 | pause |
| 96 | } |
| 97 | |
| 98 | # 重启服务 |
| 99 | restart_chrony(){ |
| 100 | print_header |
| 101 | echo "重启 Chrony 服务..." |
| 102 | echo |
| 103 | |
| 104 | sudo systemctl restart $SERVICE_NAME |
| 105 | |
| 106 | echo "完成" |
| 107 | pause |
| 108 | } |
| 109 | |
| 110 | # 查看配置 |
| 111 | show_config(){ |
| 112 | print_header |
| 113 | echo "当前 chrony.conf" |
| 114 | echo "----------------------------" |
| 115 | cat $CHRONY_CONF |
| 116 | pause |
| 117 | } |
| 118 | |
| 119 | # 修改NTP服务器 |
| 120 | modify_ntp(){ |
| 121 | print_header |
| 122 | echo "当前 NTP server 配置" |
| 123 | echo "----------------------------" |
| 124 | grep ^server $CHRONY_CONF |
| 125 | echo |
| 126 | |
| 127 | read -p "输入新的 NTP 服务器 (例如 ntp.aliyun.com): " ntpserver |
| 128 | |
| 129 | if [ -z "$ntpserver" ]; then |
| 130 | echo "未输入" |
| 131 | pause |
| 132 | return |
| 133 | fi |
| 134 | |
| 135 | sudo cp $CHRONY_CONF ${CHRONY_CONF}.bak.$(date +%s) |
| 136 | |
| 137 | sudo sed -i '/^server/d' $CHRONY_CONF |
| 138 | |
| 139 | echo "server $ntpserver iburst" | sudo tee -a $CHRONY_CONF >/dev/null |
| 140 | |
| 141 | echo |
| 142 | echo "配置已更新" |
| 143 | echo "正在重启 chrony..." |
| 144 | |
| 145 | sudo systemctl restart $SERVICE_NAME |
| 146 | |
| 147 | echo "完成" |
| 148 | pause |
| 149 | } |
| 150 | |
| 151 | # 综合检测 |
| 152 | full_check(){ |
| 153 | print_header |
| 154 | echo "系统时间" |
| 155 | echo "----------------------------" |
| 156 | date |
| 157 | echo |
| 158 | |
| 159 | echo "timedatectl" |
| 160 | echo "----------------------------" |
| 161 | timedatectl |
| 162 | echo |
| 163 | |
| 164 | echo "Chrony tracking" |
| 165 | echo "----------------------------" |
| 166 | chronyc tracking |
| 167 | echo |
| 168 | |
| 169 | echo "Chrony sources" |
| 170 | echo "----------------------------" |
| 171 | chronyc sources -v |
| 172 | echo |
| 173 | |
| 174 | echo "Chrony activity" |
| 175 | echo "----------------------------" |
| 176 | chronyc activity |
| 177 | pause |
| 178 | } |
| 179 | |
| 180 | menu(){ |
| 181 | while true |
| 182 | do |
| 183 | print_header |
| 184 | |
| 185 | echo "1 查看系统时间" |
| 186 | echo "2 查看 Chrony 服务状态" |
| 187 | echo "3 查看 NTP 来源 (sources)" |
| 188 | echo "4 查看 Chrony tracking" |
| 189 | echo "5 查看 Chrony activity" |
| 190 | echo "6 强制同步时间" |
| 191 | echo "7 查看 chrony.conf" |
| 192 | echo "8 修改 NTP 服务器" |
| 193 | echo "9 重启 Chrony" |
| 194 | echo "10 综合检测" |
| 195 | echo |
| 196 | echo "0 退出" |
| 197 | echo |
| 198 | read -p "请选择操作: " choice |
| 199 | |
| 200 | case $choice in |
| 201 | 1) show_time ;; |
| 202 | 2) chrony_status ;; |
| 203 | 3) show_sources ;; |
| 204 | 4) show_tracking ;; |
| 205 | 5) show_activity ;; |
| 206 | 6) force_sync ;; |
| 207 | 7) show_config ;; |
| 208 | 8) modify_ntp ;; |
| 209 | 9) restart_chrony ;; |
| 210 | 10) full_check ;; |
| 211 | 0) exit ;; |
| 212 | *) echo "无效选项"; sleep 1 ;; |
| 213 | esac |
| 214 | done |
| 215 | } |
| 216 | |
| 217 | check_chrony_install |
| 218 | menu |