更新后台管理消息列表;

This commit is contained in:
karlcarlo
2025-12-15 17:44:35 +08:00
parent 41d2d893d3
commit a7b3454f61
22 changed files with 1620 additions and 356 deletions

View File

@@ -61,7 +61,10 @@ init_config() {
# 日志文件路径
LOG_DIR="${APP_DIR}/logs"
LOG_FILE="${LOG_DIR}/${APP_NAME}.log"
# 获取当前日期用于日志文件分割
CURRENT_DATE=$(date +%Y-%m-%d)
LOG_FILE="${LOG_DIR}/${APP_NAME}-${CURRENT_DATE}.log"
log_info "应用名称: $APP_NAME"
log_info "应用模块: $APP_MODULE"
@@ -70,6 +73,7 @@ init_config() {
log_info "服务器端口: $APP_PORT"
log_info "工作进程数: $APP_WORKERS"
log_info "日志级别: $APP_LOG_LEVEL"
log_info "日志文件: $LOG_FILE"
}
# 检查是否在正确的目录
@@ -113,6 +117,16 @@ setup_logs() {
# 启动 Unicorn 服务器
start_server() {
local enable_reload=false
# 检查是否传递了 --reload 参数
for arg in "$@"; do
if [ "$arg" = "--reload" ]; then
enable_reload=true
break
fi
done
log_info "正在启动 $APP_NAME..."
# 检查是否已经在运行
@@ -127,15 +141,25 @@ start_server() {
fi
fi
# 启动服务器
nohup uv run uvicorn \
"$APP_MODULE" \
--host "$APP_HOST" \
--port "$APP_PORT" \
--workers "$APP_WORKERS" \
--log-level "$APP_LOG_LEVEL" \
--access-log \
--reload > "$LOG_FILE" 2>&1 &
# 构建启动命令
local uvicorn_cmd="uv run uvicorn \
$APP_MODULE \
--host $APP_HOST \
--port $APP_PORT \
--workers $APP_WORKERS \
--log-level $APP_LOG_LEVEL \
--access-log"
# 根据参数添加 --reload
if [ "$enable_reload" = true ]; then
uvicorn_cmd="$uvicorn_cmd --reload"
log_info "启用热重载模式"
else
log_info "禁用热重载模式(生产环境推荐)"
fi
# 启动服务器(使用 >> 追加日志,相同日期日志不会丢失)
nohup $uvicorn_cmd >> "$LOG_FILE" 2>&1 &
local server_pid=$!
echo $server_pid > "$PID_FILE"
@@ -146,8 +170,9 @@ start_server() {
log_success "$APP_NAME 已启动 (PID: $server_pid)"
log_info "日志文件: $LOG_FILE"
log_info "访问地址: http://$APP_HOST:$APP_PORT"
log_info "热重载: $([ "$enable_reload" = true ] && echo "已启用" || echo "已禁用")"
else
log_error "$APP_NAME 启动失败"
log_error "$APP_NAME 启动失败,请检查日志文件: $LOG_FILE"
rm -f "$PID_FILE"
exit 1
fi
@@ -192,7 +217,8 @@ restart_server() {
log_info "正在重启 $APP_NAME..."
stop_server
sleep 2
start_server
# 传递所有参数给 start_server(包括可能的 --reload)
start_server "$@"
}
# 查看服务器状态
@@ -216,35 +242,79 @@ status_server() {
# 查看服务器日志
tail_logs() {
if [ -f "$LOG_FILE" ]; then
log_info "显示日志文件最后 50 行: $LOG_FILE"
local target_log_file="$LOG_FILE"
# 检查是否有日期参数
if [ $# -gt 0 ]; then
local date_param="$1"
# 验证日期格式是否为 YYYY-MM-DD
if [[ "$date_param" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
target_log_file="${LOG_DIR}/${APP_NAME}-${date_param}.log"
log_info "查看指定日期日志: $date_param"
else
log_warning "日期参数格式错误,使用默认日期日志"
fi
fi
if [ -f "$target_log_file" ]; then
log_info "显示日志文件最后 50 行: $target_log_file"
echo "=========================================="
tail -50 "$LOG_FILE"
tail -50 "$target_log_file"
echo "=========================================="
# 显示文件基本信息
local file_size=$(du -h "$target_log_file" | cut -f1)
local line_count=$(wc -l < "$target_log_file")
log_info "文件大小: $file_size, 行数: $line_count"
else
log_warning "日志文件不存在: $LOG_FILE"
# 尝试查找最新的日志文件
local latest_log=$(ls -t "${LOG_DIR}/${APP_NAME}-"*.log 2>/dev/null | head -1)
if [ -f "$latest_log" ]; then
log_warning "指定日志文件不存在,显示最新日志文件: $latest_log"
log_info "显示日志文件最后 50 行: $latest_log"
echo "=========================================="
tail -50 "$latest_log"
echo "=========================================="
else
log_warning "日志文件不存在: $target_log_file"
log_info "可用的日志文件:"
ls -la "${LOG_DIR}/"*.log 2>/dev/null || echo "无日志文件"
fi
fi
}
# 显示帮助信息
show_help() {
echo "用法: $0 {start|stop|restart|status|logs|help}"
echo "用法: $0 {start|stop|restart|status|logs|help} [--reload] [日期]"
echo ""
echo "服务管理命令:"
echo " start 启动 $APP_NAME 服务器"
echo " stop 停止 $APP_NAME 服务器"
echo " restart 重启 $APP_NAME 服务器"
echo " status 查看 $APP_NAME 服务器状态"
echo " logs 查看 $APP_NAME 服务器日志"
echo " help 显示此帮助信息"
echo " start [--reload] 启动 $APP_NAME 服务器(默认禁用热重载)"
echo " stop 停止 $APP_NAME 服务器"
echo " restart [--reload] 重启 $APP_NAME 服务器"
echo " status 查看 $APP_NAME 服务器状态"
echo " logs [YYYY-MM-DD] 查看 $APP_NAME 服务器日志(可指定日期)"
echo " help 显示此帮助信息"
echo ""
echo "可选参数:"
echo " --reload 启用热重载模式(开发环境使用)"
echo " 日期参数 格式: YYYY-MM-DD,用于查看特定日期日志"
echo ""
echo "环境变量配置:"
echo " 所有配置都从 .env 文件读取,包括:"
echo " APP_NAME, APP_MODULE, APP_PORT, APP_WORKERS, APP_LOG_LEVEL 等"
echo ""
echo "日志功能:"
echo " • 日志按日期分割: ${APP_NAME}-YYYY-MM-DD.log"
echo " • 相同日期日志自动追加"
echo " • 支持查看特定日期日志"
echo ""
echo "示例:"
echo " $0 start # 启动服务器"
echo " $0 status # 查看状态"
echo " $0 start # 启动服务器(生产环境推荐)"
echo " $0 start --reload # 启动服务器并启用热重载(开发环境)"
echo " $0 restart --reload # 重启服务器并启用热重载"
echo " $0 status # 查看服务器状态"
echo " $0 logs # 查看今天日志"
echo " $0 logs 2025-12-14 # 查看指定日期日志"
}
# 主函数
@@ -264,19 +334,25 @@ main() {
# 处理命令行参数
case "$1" in
start)
start_server
# 传递剩余参数给 start_server
shift
start_server "$@"
;;
stop)
stop_server
;;
restart)
restart_server
# 重启时也支持 --reload 参数
shift
restart_server "$@"
;;
status)
status_server
;;
logs)
tail_logs
# 传递可能的日期参数给 tail_logs
shift
tail_logs "$@"
;;
help|--help|-h)
show_help