浏览代码

开机自启脚本

dukuisong 2 周之前
父节点
当前提交
ec93976d83
共有 1 个文件被更改,包括 16 次插入12 次删除
  1. 16 12
      script/install_autostart.sh

+ 16 - 12
script/install_autostart.sh

@@ -2,30 +2,33 @@
 
 
 # 显示帮助信息
 # 显示帮助信息
 show_help() {
 show_help() {
-    echo "用法: sudo ./install_autostart.sh [可执行文件绝对路径] [可选:服务名称]"
-    echo "示例: sudo ./install_autostart.sh /home/user/apps/myapp myapp_service"
+    echo "用法: sudo ./install_autostart.sh [可执行文件路径] [可选:服务名称]"
+    echo "示例: sudo ./install_autostart.sh ./myapp myapp_service"  # 支持相对路径
+    echo "示例: sudo ./install_autostart.sh /home/user/app"         # 支持绝对路径
     echo "说明:"
     echo "说明:"
-    echo "  第一个参数: 必须是可执行文件的绝对路径(如 /opt/myprogram)"
+    echo "  第一个参数: 可执行文件的路径(相对路径或绝对路径均可)"
     echo "  第二个参数: 可选,自定义服务名称(默认使用文件名)"
     echo "  第二个参数: 可选,自定义服务名称(默认使用文件名)"
 }
 }
 
 
 # 检查参数是否正确
 # 检查参数是否正确
 if [ $# -lt 1 ]; then
 if [ $# -lt 1 ]; then
-    echo "错误:请提供可执行文件的绝对路径!"
+    echo "错误:请提供可执行文件的路径!"
     show_help
     show_help
     exit 1
     exit 1
 fi
 fi
 
 
-# 解析参数
-EXECUTABLE_PATH="$1"
-APP_NAME="${2:-$(basename "$EXECUTABLE_PATH")}"  # 服务名默认使用文件名
+# 解析参数并转换为绝对路径
+INPUT_PATH="$1"
+# 将传入的路径(无论相对/绝对)转换为绝对路径
+EXECUTABLE_PATH=$(realpath "$INPUT_PATH")
 
 
-# 检查可执行文件是否存在且可执行
+# 检查转换后的路径是否存在
 if [ ! -f "$EXECUTABLE_PATH" ]; then
 if [ ! -f "$EXECUTABLE_PATH" ]; then
-    echo "错误:文件 $EXECUTABLE_PATH 不存在!"
+    echo "错误:文件 $INPUT_PATH(转换后路径:$EXECUTABLE_PATH)不存在!"
     exit 1
     exit 1
 fi
 fi
 
 
+# 检查文件是否可执行,不可执行则添加权限
 if [ ! -x "$EXECUTABLE_PATH" ]; then
 if [ ! -x "$EXECUTABLE_PATH" ]; then
     echo "警告:文件 $EXECUTABLE_PATH 没有执行权限,正在添加..."
     echo "警告:文件 $EXECUTABLE_PATH 没有执行权限,正在添加..."
     chmod +x "$EXECUTABLE_PATH" || {
     chmod +x "$EXECUTABLE_PATH" || {
@@ -35,12 +38,13 @@ if [ ! -x "$EXECUTABLE_PATH" ]; then
 fi
 fi
 
 
 # 配置服务参数
 # 配置服务参数
+APP_NAME="${2:-$(basename "$EXECUTABLE_PATH")}"  # 服务名默认使用文件名
 APP_DESCRIPTION="Auto-start service for $APP_NAME"
 APP_DESCRIPTION="Auto-start service for $APP_NAME"
 RUN_USER=$(whoami)
 RUN_USER=$(whoami)
 WORKING_DIR=$(dirname "$EXECUTABLE_PATH")  # 工作目录为可执行文件所在目录
 WORKING_DIR=$(dirname "$EXECUTABLE_PATH")  # 工作目录为可执行文件所在目录
 SERVICE_FILE="/etc/systemd/system/$APP_NAME.service"
 SERVICE_FILE="/etc/systemd/system/$APP_NAME.service"
 
 
-# 创建 systemd 服务文件
+# 创建 systemd 服务文件(使用转换后的绝对路径)
 echo "正在创建服务文件: $SERVICE_FILE"
 echo "正在创建服务文件: $SERVICE_FILE"
 sudo tee "$SERVICE_FILE" > /dev/null << EOF
 sudo tee "$SERVICE_FILE" > /dev/null << EOF
 [Unit]
 [Unit]
@@ -50,7 +54,7 @@ After=network.target
 [Service]
 [Service]
 User=$RUN_USER
 User=$RUN_USER
 WorkingDirectory=$WORKING_DIR
 WorkingDirectory=$WORKING_DIR
-ExecStart=$EXECUTABLE_PATH  # 直接运行可执行文件(无需Python)
+ExecStart=$EXECUTABLE_PATH  # 使用绝对路径
 Restart=always
 Restart=always
 RestartSec=5
 RestartSec=5
 
 
@@ -78,7 +82,7 @@ sudo systemctl status "$APP_NAME.service" --no-pager
 echo -e "\n----------------------------------------"
 echo -e "\n----------------------------------------"
 echo "操作完成!程序已配置为开机自启。"
 echo "操作完成!程序已配置为开机自启。"
 echo "服务名称: $APP_NAME"
 echo "服务名称: $APP_NAME"
-echo "可执行文件路径: $EXECUTABLE_PATH"
+echo "可执行文件绝对路径: $EXECUTABLE_PATH"
 echo "管理命令:"
 echo "管理命令:"
 echo "  启动: sudo systemctl start $APP_NAME.service"
 echo "  启动: sudo systemctl start $APP_NAME.service"
 echo "  停止: sudo systemctl stop $APP_NAME.service"
 echo "  停止: sudo systemctl stop $APP_NAME.service"