编写通用Bash脚本批量修正多Linux服务器chrony.conf配置
通用Chrony NTP配置批量修改脚本
脚本功能
- 自动识别Ubuntu 20-22、CentOS 7/RHEL 8系统
- 检查目标NTP配置是否已存在,存在则直接退出
- 备份原始
chrony.conf配置文件 - 注释系统默认的NTP/server条目
- 添加指定的NTP池配置
- 重启chrony服务确保配置生效
完整脚本
#!/bin/bash # 目标NTP配置条目 TARGET_NTP1="pool time.nrc.ca iburst" TARGET_NTP2="pool time.chu.nrc.ca iburst" CHRONY_CONF="/etc/chrony/chrony.conf" # 检查目标配置是否已存在 if grep -q -E "^${TARGET_NTP1}$|^${TARGET_NTP2}$" "$CHRONY_CONF"; then echo "目标NTP配置已存在,无需修改,退出脚本" exit 0 fi # 备份原始配置 BACKUP_FILE="${CHRONY_CONF}.backup.$(date +%Y%m%d%H%M%S)" cp "$CHRONY_CONF" "$BACKUP_FILE" echo "已备份原始配置至: $BACKUP_FILE" # 识别系统发行版 if grep -q "ID=ubuntu" /etc/os-release; then # Ubuntu系统:注释默认的pool条目 sed -i '/^#\?pool.*ubuntu\.com\|^#\?pool.*ubuntu\.pool\.ntp\.org/s/^/#/' "$CHRONY_CONF" elif grep -q "ID=\"centos\"" /etc/os-release || grep -q "ID=rhel" /etc/os-release; then # CentOS/RHEL系统:注释默认的server条目 sed -i '/^#\?server.*centos\.pool\.ntp\.org/s/^/#/' "$CHRONY_CONF" else echo "不支持当前系统类型,退出脚本" exit 1 fi # 添加目标NTP配置 echo -e "\n${TARGET_NTP1}\n${TARGET_NTP2}" >> "$CHRONY_CONF" echo "已添加目标NTP配置" # 重启chrony服务 if command -v systemctl &> /dev/null; then systemctl restart chronyd echo "已重启chronyd服务" else echo "无法重启chrony服务,请手动重启" fi echo "配置修改完成"
脚本说明
- 配置检查:用
grep精确匹配目标NTP条目,避免重复修改操作 - 配置备份:自动生成带时间戳的备份文件,防止配置丢失后无法回滚
- 系统识别:通过
/etc/os-release文件判断系统类型,兼容性更强 - 注释原有条目:用
sed匹配系统默认的NTP/server行,在行首添加#注释,保留原始配置痕迹 - 添加新配置:在配置文件末尾追加目标NTP条目,不干扰其他已有配置
- 服务重启:用
systemctl重启chronyd服务,确保新配置立即生效
使用方法
- 将脚本保存为
update_chrony_ntp.sh - 赋予执行权限:
chmod +x update_chrony_ntp.sh - 以root权限运行:
sudo ./update_chrony_ntp.sh
注意事项
- 确保服务器能正常访问目标NTP服务器
time.nrc.ca和time.chu.nrc.ca - 若部分系统的chrony配置路径为
/etc/chrony.conf,需修改脚本中的CHRONY_CONF变量 - 若chrony服务名称为
chrony而非chronyd,需调整脚本中的服务重启命令
内容的提问来源于stack exchange,提问作者Tech Enthusiast
相关产品推荐
相关产品推荐

