#!/bin/bash # ================================================================= # Hysteria 带宽配置自动移除脚本 # 功能: # 1. 检查并移除 'bandwidth:' 配置块 # 2. 自动重启 hysteria-server 服务 # 3. 检查服务状态 # ================================================================= # --- 配置变量 --- CONFIG_FILE="/etc/hysteria/config.yaml" SERVICE_NAME="hysteria-server.service" # --- 脚本开始 --- # 步骤 0: 检查环境 echo "===== 0. 检查环境 =====" # 检查是否以 root 用户运行 if [ "$(id -u)" -ne 0 ]; then echo -e "\033[0;31m错误:此脚本必须以 root 用户身份运行。\033[0m" >&2 echo "请使用 'sudo ./remove_hysteria_bw_config.sh' 来执行。" >&2 exit 1 fi # 检查配置文件是否存在 if [ ! -f "$CONFIG_FILE" ]; then echo -e "\033[0;31m错误:配置文件 '$CONFIG_FILE' 不存在。\033[0m" >&2 exit 1 fi echo "环境检查通过。" echo "" # 步骤 1: 检查并移除配置文件中的 bandwidth 块 echo "===== 1. 正在修改配置文件... =====" # 使用 grep -q 检查 'bandwidth:' 是否存在 if grep -q "^bandwidth:" "$CONFIG_FILE"; then echo "检测到 'bandwidth' 配置,正在尝试移除..." # 使用 sed 删除从 'bandwidth:' 开始到下一个非空白/非缩进行的所有行 # -i.bak 会创建一个备份文件,以防万一 sed -i.bak '/^bandwidth:/,/^[^ ]/{/^bandwidth:/,/^[^ ]/d}' "$CONFIG_FILE" echo -e "\033[0;32m'bandwidth' 配置块已成功移除。\033[0m" echo "原始配置文件已备份为 ${CONFIG_FILE}.bak" else echo -e "\033[0;33m未在文件中找到 'bandwidth' 配置,无需操作。\033[0m" fi echo "" # 步骤 2: 重启服务 echo "===== 2. 正在重启 Hysteria 服务... =====" systemctl restart "$SERVICE_NAME" # 检查重启命令的退出状态 if [ $? -ne 0 ]; then echo "" echo -e "\033[0;31m严重错误:Hysteria 服务重启失败!\033[0m" >&2 echo "这可能是由于未知原因导致的。请手动执行以下命令查看日志:" >&2 echo " journalctl -u $SERVICE_NAME -n 100 --no-pager" >&2 # 发生错误时,恢复备份文件 if [ -f "${CONFIG_FILE}.bak" ]; then echo "正在尝试从备份恢复配置文件..." mv "${CONFIG_FILE}.bak" "$CONFIG_FILE" echo "配置文件已恢复。" fi exit 1 fi echo "服务重启命令已成功发送。" echo "" # 步骤 3: 检查服务状态 echo "===== 3. 正在检查服务最终状态... =====" sleep 2 if systemctl is-active --quiet "$SERVICE_NAME"; then echo -e "\033[0;32m服务状态正常,正在运行 (active)。\033[0m" systemctl status "$SERVICE_NAME" | head -n 3 else echo -e "\033[0;31m警告:服务未能成功启动,当前状态为 inactive 或 failed。\033[0m" >&2 echo "请使用 'systemctl status $SERVICE_NAME' 查看详情。" >&2 fi echo "" echo "脚本执行完毕。"