#!/bin/bash

# 配置区域(用户可根据需要修改)
PORT=8421                # 检测端口号(设置为空字符串禁用端口检测)
KEYWORD="proficiency-system-0.0.1-SNAPSHOT.jar"          # 进程关键字(设置为空字符串禁用关键字检测)
START_SCRIPT="/home/hubz/services/proficiencySystemService/start.sh"  # 启动脚本绝对路径
LOG_FILE="/home/hubz/services/proficiencySystemService/service_monitor.log"  # 日志文件路径
MAX_LOG_SIZE=1048576     # 日志最大大小(1MB)

# 参数检查
if [ -z "$PORT" ] && [ -z "$KEYWORD" ]; then
  echo "错误:至少需要启用端口检测或关键字检测之一" | tee -a "$LOG_FILE"
  exit 2
fi

if [ ! -x "$START_SCRIPT" ]; then
  echo "错误:启动脚本不存在或没有执行权限" | tee -a "$LOG_FILE"
  exit 2
fi

# 日志轮转
if [ -f "$LOG_FILE" ] && [ $(stat -c %s "$LOG_FILE") -gt $MAX_LOG_SIZE ]; then
  mv "$LOG_FILE" "${LOG_FILE}.old"
fi

# 记录日志函数
log() {
  echo "[$(date '+%Y-%m-%d %T')] $1" >> "$LOG_FILE"
}

# 端口检测函数
check_port() {
  [ -z "$PORT" ] && return 1
  ss -tln | awk '{print $4}' | grep -q ":${PORT}$"
  return $?
}

# 进程检测函数
check_keyword() {
  [ -z "$KEYWORD" ] && return 1
  pgrep -f "$KEYWORD" >/dev/null
  return $?
}

# 主检测逻辑
service_status=1
if check_port || check_keyword; then
  service_status=0
fi

# 处理检测结果
if [ $service_status -eq 0 ]; then
  log "服务检测成功(端口:${PORT:-未配置}/关键字:${KEYWORD:-未配置})"
  exit 0
else
  log "服务未运行,尝试启动..."
  # 执行启动脚本并记录输出

  if "$START_SCRIPT"; then
    log "启动脚本执行成功"
    exit 0
  else
    log "启动脚本执行失败,退出码:$?"
    exit 1
  fi
fi