|
@@ -0,0 +1,91 @@
|
|
|
|
|
+#!/bin/bash
|
|
|
|
|
+
|
|
|
|
|
+# 显示帮助信息
|
|
|
|
|
+show_help() {
|
|
|
|
|
+ echo "用法: sudo ./install_autostart.sh [可执行文件路径] [可选:服务名称]"
|
|
|
|
|
+ echo "示例: sudo ./install_autostart.sh ./myapp myapp_service" # 支持相对路径
|
|
|
|
|
+ echo "示例: sudo ./install_autostart.sh /home/user/app" # 支持绝对路径
|
|
|
|
|
+ echo "说明:"
|
|
|
|
|
+ echo " 第一个参数: 可执行文件的路径(相对路径或绝对路径均可)"
|
|
|
|
|
+ echo " 第二个参数: 可选,自定义服务名称(默认使用文件名)"
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+# 检查参数是否正确
|
|
|
|
|
+if [ $# -lt 1 ]; thenc
|
|
|
|
|
+ echo "错误:请提供可执行文件的路径!"
|
|
|
|
|
+ show_help
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+# 解析参数并转换为绝对路径
|
|
|
|
|
+INPUT_PATH="$1"
|
|
|
|
|
+# 将传入的路径(无论相对/绝对)转换为绝对路径
|
|
|
|
|
+EXECUTABLE_PATH=$(realpath "$INPUT_PATH")
|
|
|
|
|
+
|
|
|
|
|
+# 检查转换后的路径是否存在
|
|
|
|
|
+if [ ! -f "$EXECUTABLE_PATH" ]; then
|
|
|
|
|
+ echo "错误:文件 $INPUT_PATH(转换后路径:$EXECUTABLE_PATH)不存在!"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+# 检查文件是否可执行,不可执行则添加权限
|
|
|
|
|
+if [ ! -x "$EXECUTABLE_PATH" ]; then
|
|
|
|
|
+ echo "警告:文件 $EXECUTABLE_PATH 没有执行权限,正在添加..."
|
|
|
|
|
+ chmod +x "$EXECUTABLE_PATH" || {
|
|
|
|
|
+ echo "错误:无法为 $EXECUTABLE_PATH 添加执行权限!"
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ }
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+# 配置服务参数
|
|
|
|
|
+APP_NAME="${2:-$(basename "$EXECUTABLE_PATH")}" # 服务名默认使用文件名
|
|
|
|
|
+APP_DESCRIPTION="Auto-start service for $APP_NAME"
|
|
|
|
|
+RUN_USER=$(whoami)
|
|
|
|
|
+WORKING_DIR=$(dirname "$EXECUTABLE_PATH") # 工作目录为可执行文件所在目录
|
|
|
|
|
+SERVICE_FILE="/etc/systemd/system/$APP_NAME.service"
|
|
|
|
|
+
|
|
|
|
|
+# 创建 systemd 服务文件(使用转换后的绝对路径)
|
|
|
|
|
+echo "正在创建服务文件: $SERVICE_FILE"
|
|
|
|
|
+sudo tee "$SERVICE_FILE" > /dev/null << EOF
|
|
|
|
|
+[Unit]
|
|
|
|
|
+Description=$APP_DESCRIPTION
|
|
|
|
|
+After=network.target
|
|
|
|
|
+
|
|
|
|
|
+[Service]
|
|
|
|
|
+User=$RUN_USER
|
|
|
|
|
+WorkingDirectory=$WORKING_DIR
|
|
|
|
|
+ExecStart=$EXECUTABLE_PATH # 使用绝对路径
|
|
|
|
|
+Restart=always
|
|
|
|
|
+RestartSec=5
|
|
|
|
|
+
|
|
|
|
|
+[Install]
|
|
|
|
|
+WantedBy=multi-user.target
|
|
|
|
|
+EOF
|
|
|
|
|
+
|
|
|
|
|
+# 设置服务文件权限
|
|
|
|
|
+sudo chmod 644 "$SERVICE_FILE"
|
|
|
|
|
+
|
|
|
|
|
+# 启用并启动服务
|
|
|
|
|
+echo "重新加载系统服务配置..."
|
|
|
|
|
+sudo systemctl daemon-reload
|
|
|
|
|
+
|
|
|
|
|
+echo "启用开机自启..."
|
|
|
|
|
+sudo systemctl enable "$APP_NAME.service"
|
|
|
|
|
+
|
|
|
|
|
+echo "启动服务..."
|
|
|
|
|
+sudo systemctl start "$APP_NAME.service"
|
|
|
|
|
+
|
|
|
|
|
+# 验证服务状态
|
|
|
|
|
+echo -e "\n服务状态验证:"
|
|
|
|
|
+sudo systemctl status "$APP_NAME.service" --no-pager
|
|
|
|
|
+
|
|
|
|
|
+echo -e "\n----------------------------------------"
|
|
|
|
|
+echo "操作完成!程序已配置为开机自启。"
|
|
|
|
|
+echo "服务名称: $APP_NAME"
|
|
|
|
|
+echo "可执行文件绝对路径: $EXECUTABLE_PATH"
|
|
|
|
|
+echo "管理命令:"
|
|
|
|
|
+echo " 启动: sudo systemctl start $APP_NAME.service"
|
|
|
|
|
+echo " 停止: sudo systemctl stop $APP_NAME.service"
|
|
|
|
|
+echo " 重启: sudo systemctl restart $APP_NAME.service"
|
|
|
|
|
+echo " 查看日志: sudo journalctl -u $APP_NAME.service -f"
|
|
|
|
|
+echo " 移除自启: sudo systemctl disable $APP_NAME.service"
|