install-service.sh 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. #!/bin/bash
  2. #
  3. # 双摄像头联动抓拍系统 - 服务安装脚本
  4. #
  5. # 使用方法:
  6. # sudo ./install-service.sh # 安装并启用服务
  7. # sudo ./install-service.sh remove # 移除服务
  8. #
  9. set -e
  10. # 配置
  11. SERVICE_NAME="dual-camera"
  12. SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
  13. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  14. # 颜色输出
  15. RED='\033[0;31m'
  16. GREEN='\033[0;32m'
  17. YELLOW='\033[1;33m'
  18. NC='\033[0m' # No Color
  19. print_info() {
  20. echo -e "${GREEN}[INFO]${NC} $1"
  21. }
  22. print_warn() {
  23. echo -e "${YELLOW}[WARN]${NC} $1"
  24. }
  25. print_error() {
  26. echo -e "${RED}[ERROR]${NC} $1"
  27. }
  28. # 检查 root 权限
  29. check_root() {
  30. if [[ $EUID -ne 0 ]]; then
  31. print_error "此脚本需要 root 权限,请使用 sudo 运行"
  32. exit 1
  33. fi
  34. }
  35. # 安装服务
  36. install_service() {
  37. print_info "开始安装 ${SERVICE_NAME} 服务..."
  38. # 检查服务文件是否存在
  39. if [[ -f "${SERVICE_FILE}" ]]; then
  40. print_warn "服务文件已存在,先停止并禁用旧服务..."
  41. systemctl stop ${SERVICE_NAME} 2>/dev/null || true
  42. systemctl disable ${SERVICE_NAME} 2>/dev/null || true
  43. fi
  44. # 复制服务文件
  45. print_info "复制服务文件到 ${SERVICE_FILE}..."
  46. cp "${SCRIPT_DIR}/dual-camera.service" "${SERVICE_FILE}"
  47. # 设置权限
  48. chmod 644 "${SERVICE_FILE}"
  49. # 重载 systemd
  50. print_info "重载 systemd 配置..."
  51. systemctl daemon-reload
  52. # 启用服务
  53. print_info "启用开机自启动..."
  54. systemctl enable ${SERVICE_NAME}
  55. print_info "服务安装完成!"
  56. echo ""
  57. echo "常用命令:"
  58. echo " 启动服务: sudo systemctl start ${SERVICE_NAME}"
  59. echo " 停止服务: sudo systemctl stop ${SERVICE_NAME}"
  60. echo " 重启服务: sudo systemctl restart ${SERVICE_NAME}"
  61. echo " 查看状态: sudo systemctl status ${SERVICE_NAME}"
  62. echo " 查看日志: sudo journalctl -u ${SERVICE_NAME} -f"
  63. echo ""
  64. read -p "是否立即启动服务?[y/N] " -n 1 -r
  65. echo
  66. if [[ $REPLY =~ ^[Yy]$ ]]; then
  67. print_info "启动服务..."
  68. systemctl start ${SERVICE_NAME}
  69. sleep 2
  70. systemctl status ${SERVICE_NAME} --no-pager || true
  71. fi
  72. }
  73. # 移除服务
  74. remove_service() {
  75. print_info "开始移除 ${SERVICE_NAME} 服务..."
  76. # 停止服务
  77. print_info "停止服务..."
  78. systemctl stop ${SERVICE_NAME} 2>/dev/null || true
  79. # 禁用服务
  80. print_info "禁用开机自启动..."
  81. systemctl disable ${SERVICE_NAME} 2>/dev/null || true
  82. # 删除服务文件
  83. if [[ -f "${SERVICE_FILE}" ]]; then
  84. print_info "删除服务文件..."
  85. rm -f "${SERVICE_FILE}"
  86. fi
  87. # 重载 systemd
  88. print_info "重载 systemd 配置..."
  89. systemctl daemon-reload
  90. print_info "服务已移除!"
  91. }
  92. # 主函数
  93. main() {
  94. case "${1:-install}" in
  95. install)
  96. check_root
  97. install_service
  98. ;;
  99. remove|uninstall)
  100. check_root
  101. remove_service
  102. ;;
  103. *)
  104. echo "用法: $0 [install|remove]"
  105. echo ""
  106. echo " install - 安装并启用服务(默认)"
  107. echo " remove - 停止并移除服务"
  108. exit 1
  109. ;;
  110. esac
  111. }
  112. main "$@"