阶段二:认证授权模块 - User实体类、Mapper、DataService - Token服务(Redis存储)、密码加密(BCrypt) - 认证拦截器、UserContext上下文 - 登录/登出接口 阶段三:核心业务模块 - 用户管理:CRUD、状态管理、密码重置 - 模板管理:CRUD、状态管理 - 工作日志:CRUD、权限控制 配置分离架构 - env.properties(环境敏感配置) - service.properties(服务配置) - logback-spring.xml更新 部署脚本 - deploy/目录(Nginx配置、启停脚本、备份脚本) 单元测试:29个测试全部通过
61 lines
1.4 KiB
Bash
Executable File
61 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
||
# ====================================================
|
||
# 工作日志服务平台 - 应用停止脚本
|
||
# ====================================================
|
||
|
||
# 应用配置
|
||
APP_NAME="worklog-api"
|
||
APP_HOME="/opt/worklog/${APP_NAME}"
|
||
PID_FILE="${APP_HOME}/${APP_NAME}.pid"
|
||
|
||
# 检查 PID 文件是否存在
|
||
if [ ! -f "${PID_FILE}" ]; then
|
||
echo "应用未运行(找不到 PID 文件)"
|
||
exit 0
|
||
fi
|
||
|
||
# 读取 PID
|
||
PID=$(cat "${PID_FILE}")
|
||
|
||
# 检查进程是否存在
|
||
if ! ps -p ${PID} > /dev/null 2>&1; then
|
||
echo "应用未运行(进程不存在)"
|
||
rm -f "${PID_FILE}"
|
||
exit 0
|
||
fi
|
||
|
||
echo "========================================="
|
||
echo "停止应用: ${APP_NAME}"
|
||
echo "PID: ${PID}"
|
||
echo "========================================="
|
||
|
||
# 优雅停止(发送 SIGTERM)
|
||
echo "发送停止信号..."
|
||
kill ${PID}
|
||
|
||
# 等待进程结束(最多等待 30 秒)
|
||
TIMEOUT=30
|
||
COUNT=0
|
||
while ps -p ${PID} > /dev/null 2>&1; do
|
||
if [ ${COUNT} -ge ${TIMEOUT} ]; then
|
||
echo "WARNING: 应用未在 ${TIMEOUT} 秒内停止,强制终止..."
|
||
kill -9 ${PID}
|
||
sleep 2
|
||
break
|
||
fi
|
||
|
||
echo "等待应用停止... (${COUNT}/${TIMEOUT})"
|
||
sleep 1
|
||
COUNT=$((COUNT + 1))
|
||
done
|
||
|
||
# 确认进程已停止
|
||
if ps -p ${PID} > /dev/null 2>&1; then
|
||
echo "ERROR: 无法停止应用"
|
||
exit 1
|
||
else
|
||
echo "应用已停止"
|
||
rm -f "${PID_FILE}"
|
||
exit 0
|
||
fi
|