#!/bin/bash # # 双摄像头联动抓拍系统 - 服务安装脚本 # # 使用方法: # sudo ./install-service.sh # 安装并启用服务 # sudo ./install-service.sh remove # 移除服务 # set -e # 配置 SERVICE_NAME="dual-camera" SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color print_info() { echo -e "${GREEN}[INFO]${NC} $1" } print_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查 root 权限 check_root() { if [[ $EUID -ne 0 ]]; then print_error "此脚本需要 root 权限,请使用 sudo 运行" exit 1 fi } # 安装服务 install_service() { print_info "开始安装 ${SERVICE_NAME} 服务..." # 检查服务文件是否存在 if [[ -f "${SERVICE_FILE}" ]]; then print_warn "服务文件已存在,先停止并禁用旧服务..." systemctl stop ${SERVICE_NAME} 2>/dev/null || true systemctl disable ${SERVICE_NAME} 2>/dev/null || true fi # 复制服务文件 print_info "复制服务文件到 ${SERVICE_FILE}..." cp "${SCRIPT_DIR}/dual-camera.service" "${SERVICE_FILE}" # 设置权限 chmod 644 "${SERVICE_FILE}" # 重载 systemd print_info "重载 systemd 配置..." systemctl daemon-reload # 启用服务 print_info "启用开机自启动..." systemctl enable ${SERVICE_NAME} print_info "服务安装完成!" echo "" echo "常用命令:" echo " 启动服务: sudo systemctl start ${SERVICE_NAME}" echo " 停止服务: sudo systemctl stop ${SERVICE_NAME}" echo " 重启服务: sudo systemctl restart ${SERVICE_NAME}" echo " 查看状态: sudo systemctl status ${SERVICE_NAME}" echo " 查看日志: sudo journalctl -u ${SERVICE_NAME} -f" echo "" read -p "是否立即启动服务?[y/N] " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then print_info "启动服务..." systemctl start ${SERVICE_NAME} sleep 2 systemctl status ${SERVICE_NAME} --no-pager || true fi } # 移除服务 remove_service() { print_info "开始移除 ${SERVICE_NAME} 服务..." # 停止服务 print_info "停止服务..." systemctl stop ${SERVICE_NAME} 2>/dev/null || true # 禁用服务 print_info "禁用开机自启动..." systemctl disable ${SERVICE_NAME} 2>/dev/null || true # 删除服务文件 if [[ -f "${SERVICE_FILE}" ]]; then print_info "删除服务文件..." rm -f "${SERVICE_FILE}" fi # 重载 systemd print_info "重载 systemd 配置..." systemctl daemon-reload print_info "服务已移除!" } # 主函数 main() { case "${1:-install}" in install) check_root install_service ;; remove|uninstall) check_root remove_service ;; *) echo "用法: $0 [install|remove]" echo "" echo " install - 安装并启用服务(默认)" echo " remove - 停止并移除服务" exit 1 ;; esac } main "$@"