install_autostart.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #!/bin/bash
  2. # 显示帮助信息
  3. show_help() {
  4. echo "用法: sudo ./install_autostart.sh [可执行文件绝对路径] [可选:服务名称]"
  5. echo "示例: sudo ./install_autostart.sh /home/user/apps/myapp myapp_service"
  6. echo "说明:"
  7. echo " 第一个参数: 必须是可执行文件的绝对路径(如 /opt/myprogram)"
  8. echo " 第二个参数: 可选,自定义服务名称(默认使用文件名)"
  9. }
  10. # 检查参数是否正确
  11. if [ $# -lt 1 ]; then
  12. echo "错误:请提供可执行文件的绝对路径!"
  13. show_help
  14. exit 1
  15. fi
  16. # 解析参数
  17. EXECUTABLE_PATH="$1"
  18. APP_NAME="${2:-$(basename "$EXECUTABLE_PATH")}" # 服务名默认使用文件名
  19. # 检查可执行文件是否存在且可执行
  20. if [ ! -f "$EXECUTABLE_PATH" ]; then
  21. echo "错误:文件 $EXECUTABLE_PATH 不存在!"
  22. exit 1
  23. fi
  24. if [ ! -x "$EXECUTABLE_PATH" ]; then
  25. echo "警告:文件 $EXECUTABLE_PATH 没有执行权限,正在添加..."
  26. chmod +x "$EXECUTABLE_PATH" || {
  27. echo "错误:无法为 $EXECUTABLE_PATH 添加执行权限!"
  28. exit 1
  29. }
  30. fi
  31. # 配置服务参数
  32. APP_DESCRIPTION="Auto-start service for $APP_NAME"
  33. RUN_USER=$(whoami)
  34. WORKING_DIR=$(dirname "$EXECUTABLE_PATH") # 工作目录为可执行文件所在目录
  35. SERVICE_FILE="/etc/systemd/system/$APP_NAME.service"
  36. # 创建 systemd 服务文件
  37. echo "正在创建服务文件: $SERVICE_FILE"
  38. sudo tee "$SERVICE_FILE" > /dev/null << EOF
  39. [Unit]
  40. Description=$APP_DESCRIPTION
  41. After=network.target
  42. [Service]
  43. User=$RUN_USER
  44. WorkingDirectory=$WORKING_DIR
  45. ExecStart=$EXECUTABLE_PATH # 直接运行可执行文件(无需Python)
  46. Restart=always
  47. RestartSec=5
  48. [Install]
  49. WantedBy=multi-user.target
  50. EOF
  51. # 设置服务文件权限
  52. sudo chmod 644 "$SERVICE_FILE"
  53. # 启用并启动服务
  54. echo "重新加载系统服务配置..."
  55. sudo systemctl daemon-reload
  56. echo "启用开机自启..."
  57. sudo systemctl enable "$APP_NAME.service"
  58. echo "启动服务..."
  59. sudo systemctl start "$APP_NAME.service"
  60. # 验证服务状态
  61. echo -e "\n服务状态验证:"
  62. sudo systemctl status "$APP_NAME.service" --no-pager
  63. echo -e "\n----------------------------------------"
  64. echo "操作完成!程序已配置为开机自启。"
  65. echo "服务名称: $APP_NAME"
  66. echo "可执行文件路径: $EXECUTABLE_PATH"
  67. echo "管理命令:"
  68. echo " 启动: sudo systemctl start $APP_NAME.service"
  69. echo " 停止: sudo systemctl stop $APP_NAME.service"
  70. echo " 重启: sudo systemctl restart $APP_NAME.service"
  71. echo " 查看日志: sudo journalctl -u $APP_NAME.service -f"
  72. echo " 移除自启: sudo systemctl disable $APP_NAME.service"