#!/bin/bash set -euo pipefail APP_DIR="$(cd "$(dirname "$0")" && pwd)" DEPLOY_DIR="$APP_DIR/deploy" SERVICE_DIR="/etc/systemd/system" LOG_DIR="$APP_DIR/logs" PREFIX_FILE="$APP_DIR/.service-prefix" SERVICE_SUFFIXES=(server cli scheduler) if [ ! -f "$PREFIX_FILE" ]; then echo "缺少 $PREFIX_FILE,请先运行 initializer 完成初始化" exit 1 fi SERVICE_PREFIX="$(tr -d '\r\n' < "$PREFIX_FILE")" if [[ ! "$SERVICE_PREFIX" =~ ^[A-Za-z0-9][A-Za-z0-9_.-]*$ ]]; then echo "无效的服务前缀: $SERVICE_PREFIX" exit 1 fi if [ "$(id -u)" -ne 0 ]; then echo "请使用 root 权限运行: sudo bash install.sh" exit 1 fi mkdir -p "$LOG_DIR" echo "=== 安装 systemd 服务 ===" for svc in "${SERVICE_SUFFIXES[@]}"; do src="$DEPLOY_DIR/${svc}.service" service_name="${SERVICE_PREFIX}-${svc}" if [ ! -f "$src" ]; then echo "[${svc}] service 文件不存在: $src" exit 1 fi escaped_app_dir="$(printf '%s' "$APP_DIR" | sed 's/[&|\\]/\\&/g')" sed "s|/root|$escaped_app_dir|g" "$src" > "$SERVICE_DIR/${service_name}.service" echo "[${service_name}] 已安装到 $SERVICE_DIR/${service_name}.service" done systemctl daemon-reload for svc in "${SERVICE_SUFFIXES[@]}"; do service_name="${SERVICE_PREFIX}-${svc}" systemctl enable "$service_name" echo "[${service_name}] 已设置开机自启" done for binary in server cli scheduler; do if [ -f "$APP_DIR/$binary" ]; then chmod +x "$APP_DIR/$binary" fi done echo "" echo "=== 安装完成 ===" echo "使用方式:" echo " bash start.sh # 启动全部" echo " bash stop.sh # 停止全部" echo " bash restart.sh # 重启全部" echo " systemctl status ${SERVICE_PREFIX}-server # 查看主服务状态" echo " systemctl status ${SERVICE_PREFIX}-scheduler # 查看调度器状态" echo " journalctl -u ${SERVICE_PREFIX}-scheduler -f # 查看调度器实时日志"