#!/bin/bash # 显示帮助信息 show_help() { echo "用法: sudo ./install_autostart.sh [可执行文件绝对路径] [可选:服务名称]" echo "示例: sudo ./install_autostart.sh /home/user/apps/myapp myapp_service" echo "说明:" echo " 第一个参数: 必须是可执行文件的绝对路径(如 /opt/myprogram)" echo " 第二个参数: 可选,自定义服务名称(默认使用文件名)" } # 检查参数是否正确 if [ $# -lt 1 ]; then echo "错误:请提供可执行文件的绝对路径!" show_help exit 1 fi # 解析参数 EXECUTABLE_PATH="$1" APP_NAME="${2:-$(basename "$EXECUTABLE_PATH")}" # 服务名默认使用文件名 # 检查可执行文件是否存在且可执行 if [ ! -f "$EXECUTABLE_PATH" ]; then echo "错误:文件 $EXECUTABLE_PATH 不存在!" exit 1 fi if [ ! -x "$EXECUTABLE_PATH" ]; then echo "警告:文件 $EXECUTABLE_PATH 没有执行权限,正在添加..." chmod +x "$EXECUTABLE_PATH" || { echo "错误:无法为 $EXECUTABLE_PATH 添加执行权限!" exit 1 } fi # 配置服务参数 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 # 直接运行可执行文件(无需Python) 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"