|
@@ -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"
|