mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-12 20:26:37 +08:00
优化agent安装脚本
This commit is contained in:
+135
-28
@@ -1,7 +1,42 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# GOST 多实例管理脚本
|
||||||
|
# 支持在同一台机器上运行多个 GOST 实例
|
||||||
|
#
|
||||||
|
# 使用方法:
|
||||||
|
# 交互式安装: ./install.sh
|
||||||
|
# 命令行安装: ./install.sh -a "服务器地址" -s "密钥"
|
||||||
|
#
|
||||||
|
# 参数说明:
|
||||||
|
# -a: 服务器地址
|
||||||
|
# -s: 密钥
|
||||||
|
#
|
||||||
# 下载地址
|
# 下载地址
|
||||||
DOWNLOAD_URL="https://raw.githubusercontent.com/bqlpfy/forward-panel/refs/heads/main/go-gost/gost"
|
DOWNLOAD_URL="https://raw.githubusercontent.com/bqlpfy/forward-panel/refs/heads/main/go-gost/gost"
|
||||||
INSTALL_DIR="/etc/gost"
|
|
||||||
|
# 获取实例名称
|
||||||
|
get_instance_name() {
|
||||||
|
if [[ -z "$INSTANCE_NAME" ]]; then
|
||||||
|
echo ""
|
||||||
|
echo "🏷️ 实例名称配置..."
|
||||||
|
read -p "请输入实例名称 (留空使用默认名称 'gost'): " INSTANCE_NAME
|
||||||
|
if [[ -z "$INSTANCE_NAME" ]]; then
|
||||||
|
INSTANCE_NAME="gost"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 设置动态变量
|
||||||
|
if [[ "$INSTANCE_NAME" == "gost" ]]; then
|
||||||
|
INSTALL_DIR="/etc/gost"
|
||||||
|
SERVICE_NAME="gost"
|
||||||
|
else
|
||||||
|
INSTALL_DIR="/etc/gost-${INSTANCE_NAME}"
|
||||||
|
SERVICE_NAME="gost-${INSTANCE_NAME}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "✅ 实例名称: $INSTANCE_NAME"
|
||||||
|
echo "📁 安装目录: $INSTALL_DIR"
|
||||||
|
echo "🔧 服务名称: $SERVICE_NAME"
|
||||||
|
}
|
||||||
|
|
||||||
# 显示菜单
|
# 显示菜单
|
||||||
show_menu() {
|
show_menu() {
|
||||||
@@ -12,7 +47,72 @@ show_menu() {
|
|||||||
echo "1. 安装"
|
echo "1. 安装"
|
||||||
echo "2. 更新"
|
echo "2. 更新"
|
||||||
echo "3. 卸载"
|
echo "3. 卸载"
|
||||||
echo "4. 退出"
|
echo "4. 查看已有服务"
|
||||||
|
echo "5. 退出"
|
||||||
|
echo "==============================================="
|
||||||
|
}
|
||||||
|
|
||||||
|
# 查看已有服务
|
||||||
|
list_services() {
|
||||||
|
echo "🔍 查看已有的 GOST 服务..."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 检查是否支持systemctl
|
||||||
|
if ! command -v systemctl &> /dev/null; then
|
||||||
|
echo "❌ 此功能需要 systemd 支持(Linux 系统)"
|
||||||
|
echo "💡 当前系统不支持 systemctl 命令"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 查找所有gost相关的服务
|
||||||
|
GOST_SERVICES=$(systemctl list-units --all --no-pager | grep -E "gost.*\.service" | awk '{print $1}' || true)
|
||||||
|
|
||||||
|
if [[ -z "$GOST_SERVICES" ]]; then
|
||||||
|
echo "❌ 未找到任何 GOST 服务"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "📋 已安装的 GOST 服务:"
|
||||||
|
echo "==============================================="
|
||||||
|
|
||||||
|
for service in $GOST_SERVICES; do
|
||||||
|
# 提取实例名称
|
||||||
|
if [[ "$service" == "gost.service" ]]; then
|
||||||
|
instance_name="gost (默认)"
|
||||||
|
config_dir="/etc/gost"
|
||||||
|
else
|
||||||
|
instance_name=$(echo "$service" | sed 's/gost-//' | sed 's/\.service//')
|
||||||
|
config_dir="/etc/gost-${instance_name}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 获取服务状态
|
||||||
|
status=$(systemctl is-active "$service" 2>/dev/null || echo "unknown")
|
||||||
|
enabled=$(systemctl is-enabled "$service" 2>/dev/null || echo "unknown")
|
||||||
|
|
||||||
|
# 显示服务信息
|
||||||
|
echo "🔧 服务名称: $service"
|
||||||
|
echo "🏷️ 实例名称: $instance_name"
|
||||||
|
echo "📁 配置目录: $config_dir"
|
||||||
|
echo "🟢 运行状态: $status"
|
||||||
|
echo "⚡ 开机启动: $enabled"
|
||||||
|
|
||||||
|
# 显示配置信息(如果配置文件存在)
|
||||||
|
if [[ -f "$config_dir/config.json" ]]; then
|
||||||
|
server_addr=$(grep -o '"addr":[[:space:]]*"[^"]*"' "$config_dir/config.json" 2>/dev/null | cut -d'"' -f4 || echo "未知")
|
||||||
|
echo "🌐 服务器地址: $server_addr"
|
||||||
|
else
|
||||||
|
echo "🌐 服务器地址: 配置文件不存在"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "-----------------------------------------------"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "💡 服务管理命令:"
|
||||||
|
echo " 查看状态: systemctl status <服务名>"
|
||||||
|
echo " 启动服务: systemctl start <服务名>"
|
||||||
|
echo " 停止服务: systemctl stop <服务名>"
|
||||||
|
echo " 查看日志: journalctl -u <服务名> -f"
|
||||||
echo "==============================================="
|
echo "==============================================="
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,6 +216,7 @@ done
|
|||||||
# 安装功能
|
# 安装功能
|
||||||
install_gost() {
|
install_gost() {
|
||||||
echo "🚀 开始安装 GOST..."
|
echo "🚀 开始安装 GOST..."
|
||||||
|
get_instance_name
|
||||||
get_config_params
|
get_config_params
|
||||||
|
|
||||||
# 询问是否有加速下载地址
|
# 询问是否有加速下载地址
|
||||||
@@ -134,10 +235,10 @@ install_gost() {
|
|||||||
mkdir -p "$INSTALL_DIR"
|
mkdir -p "$INSTALL_DIR"
|
||||||
|
|
||||||
# 停止并禁用已有服务
|
# 停止并禁用已有服务
|
||||||
if systemctl list-units --full -all | grep -Fq "gost.service"; then
|
if systemctl list-units --full -all | grep -Fq "${SERVICE_NAME}.service"; then
|
||||||
echo "🔍 检测到已存在的gost服务"
|
echo "🔍 检测到已存在的${SERVICE_NAME}服务"
|
||||||
systemctl stop gost 2>/dev/null && echo "🛑 停止服务"
|
systemctl stop ${SERVICE_NAME} 2>/dev/null && echo "🛑 停止服务"
|
||||||
systemctl disable gost 2>/dev/null && echo "🚫 禁用自启"
|
systemctl disable ${SERVICE_NAME} 2>/dev/null && echo "🚫 禁用自启"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 删除旧文件
|
# 删除旧文件
|
||||||
@@ -181,10 +282,10 @@ EOF
|
|||||||
chmod 600 "$INSTALL_DIR"/*.json
|
chmod 600 "$INSTALL_DIR"/*.json
|
||||||
|
|
||||||
# 创建 systemd 服务
|
# 创建 systemd 服务
|
||||||
SERVICE_FILE="/etc/systemd/system/gost.service"
|
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
|
||||||
cat > "$SERVICE_FILE" <<EOF
|
cat > "$SERVICE_FILE" <<EOF
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Gost Proxy Service
|
Description=Gost Proxy Service ($INSTANCE_NAME)
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
@@ -198,27 +299,28 @@ EOF
|
|||||||
|
|
||||||
# 启动服务
|
# 启动服务
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
systemctl enable gost
|
systemctl enable ${SERVICE_NAME}
|
||||||
systemctl start gost
|
systemctl start ${SERVICE_NAME}
|
||||||
|
|
||||||
# 检查状态
|
# 检查状态
|
||||||
echo "🔄 检查服务状态..."
|
echo "🔄 检查服务状态..."
|
||||||
if systemctl is-active --quiet gost; then
|
if systemctl is-active --quiet ${SERVICE_NAME}; then
|
||||||
echo "✅ 安装完成,gost服务已启动并设置为开机启动。"
|
echo "✅ 安装完成,${SERVICE_NAME}服务已启动并设置为开机启动。"
|
||||||
echo "📁 配置目录: $INSTALL_DIR"
|
echo "📁 配置目录: $INSTALL_DIR"
|
||||||
echo "🔧 服务状态: $(systemctl is-active gost)"
|
echo "🔧 服务状态: $(systemctl is-active ${SERVICE_NAME})"
|
||||||
else
|
else
|
||||||
echo "❌ gost服务启动失败,请执行以下命令查看日志:"
|
echo "❌ ${SERVICE_NAME}服务启动失败,请执行以下命令查看日志:"
|
||||||
echo "journalctl -u gost -f"
|
echo "journalctl -u ${SERVICE_NAME} -f"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 更新功能
|
# 更新功能
|
||||||
update_gost() {
|
update_gost() {
|
||||||
echo "🔄 开始更新 GOST..."
|
echo "🔄 开始更新 GOST..."
|
||||||
|
get_instance_name
|
||||||
|
|
||||||
if [[ ! -d "$INSTALL_DIR" ]]; then
|
if [[ ! -d "$INSTALL_DIR" ]]; then
|
||||||
echo "❌ GOST 未安装,请先选择安装。"
|
echo "❌ GOST 实例 '$INSTANCE_NAME' 未安装,请先选择安装。"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -244,9 +346,9 @@ update_gost() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# 停止服务
|
# 停止服务
|
||||||
if systemctl list-units --full -all | grep -Fq "gost.service"; then
|
if systemctl list-units --full -all | grep -Fq "${SERVICE_NAME}.service"; then
|
||||||
echo "🛑 停止 gost 服务..."
|
echo "🛑 停止 ${SERVICE_NAME} 服务..."
|
||||||
systemctl stop gost
|
systemctl stop ${SERVICE_NAME}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 替换文件
|
# 替换文件
|
||||||
@@ -258,7 +360,7 @@ update_gost() {
|
|||||||
|
|
||||||
# 重启服务
|
# 重启服务
|
||||||
echo "🔄 重启服务..."
|
echo "🔄 重启服务..."
|
||||||
systemctl start gost
|
systemctl start ${SERVICE_NAME}
|
||||||
|
|
||||||
echo "✅ 更新完成,服务已重新启动。"
|
echo "✅ 更新完成,服务已重新启动。"
|
||||||
}
|
}
|
||||||
@@ -266,23 +368,24 @@ update_gost() {
|
|||||||
# 卸载功能
|
# 卸载功能
|
||||||
uninstall_gost() {
|
uninstall_gost() {
|
||||||
echo "🗑️ 开始卸载 GOST..."
|
echo "🗑️ 开始卸载 GOST..."
|
||||||
|
get_instance_name
|
||||||
|
|
||||||
read -p "确认卸载 GOST 吗?此操作将删除所有相关文件 (y/N): " confirm
|
read -p "确认卸载 GOST 实例 '$INSTANCE_NAME' 吗?此操作将删除所有相关文件 (y/N): " confirm
|
||||||
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
|
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
|
||||||
echo "❌ 取消卸载"
|
echo "❌ 取消卸载"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 停止并禁用服务
|
# 停止并禁用服务
|
||||||
if systemctl list-units --full -all | grep -Fq "gost.service"; then
|
if systemctl list-units --full -all | grep -Fq "${SERVICE_NAME}.service"; then
|
||||||
echo "🛑 停止并禁用服务..."
|
echo "🛑 停止并禁用服务..."
|
||||||
systemctl stop gost 2>/dev/null
|
systemctl stop ${SERVICE_NAME} 2>/dev/null
|
||||||
systemctl disable gost 2>/dev/null
|
systemctl disable ${SERVICE_NAME} 2>/dev/null
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 删除服务文件
|
# 删除服务文件
|
||||||
if [[ -f "/etc/systemd/system/gost.service" ]]; then
|
if [[ -f "/etc/systemd/system/${SERVICE_NAME}.service" ]]; then
|
||||||
rm -f "/etc/systemd/system/gost.service"
|
rm -f "/etc/systemd/system/${SERVICE_NAME}.service"
|
||||||
echo "🧹 删除服务文件"
|
echo "🧹 删除服务文件"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -309,7 +412,7 @@ main() {
|
|||||||
# 显示交互式菜单
|
# 显示交互式菜单
|
||||||
while true; do
|
while true; do
|
||||||
show_menu
|
show_menu
|
||||||
read -p "请输入选项 (1-4): " choice
|
read -p "请输入选项 (1-5): " choice
|
||||||
|
|
||||||
case $choice in
|
case $choice in
|
||||||
1)
|
1)
|
||||||
@@ -325,11 +428,15 @@ main() {
|
|||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
4)
|
4)
|
||||||
|
list_services
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
5)
|
||||||
echo "👋 退出脚本"
|
echo "👋 退出脚本"
|
||||||
exit 0
|
exit 0
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "❌ 无效选项,请输入 1-4"
|
echo "❌ 无效选项,请输入 1-5"
|
||||||
echo ""
|
echo ""
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user