- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境) - 集成 Laravel Octane (Swoole) 提升性能 - 新增健康检查、监控脚本及部署文档 - 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch) - 优化文档转换、预览服务及队列任务 - 添加 CreateAdminUser 命令与路由健康检查接口 - 新增 Swoole 队列兼容性测试套件 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
210 lines
5.4 KiB
Bash
Executable File
210 lines
5.4 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 停止Docker服务监控脚本
|
||
|
||
set -e
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 日志函数
|
||
log_info() {
|
||
echo -e "${BLUE}[INFO]${NC} $1"
|
||
}
|
||
|
||
log_success() {
|
||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||
}
|
||
|
||
log_warning() {
|
||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}[ERROR]${NC} $1"
|
||
}
|
||
|
||
# 停止监控进程
|
||
stop_monitoring() {
|
||
log_info "停止监控进程..."
|
||
|
||
local monitor_pid_file="./storage/logs/monitor.pid"
|
||
local stopped=false
|
||
|
||
# 通过PID文件停止
|
||
if [ -f "$monitor_pid_file" ]; then
|
||
local monitor_pid=$(cat "$monitor_pid_file")
|
||
if kill -0 $monitor_pid 2>/dev/null; then
|
||
log_info "通过PID文件停止监控进程 (PID: $monitor_pid)"
|
||
kill $monitor_pid
|
||
sleep 2
|
||
|
||
# 确认进程已停止
|
||
if ! kill -0 $monitor_pid 2>/dev/null; then
|
||
log_success "监控进程已停止"
|
||
stopped=true
|
||
else
|
||
log_warning "监控进程未响应TERM信号,尝试强制停止..."
|
||
kill -9 $monitor_pid 2>/dev/null || true
|
||
sleep 1
|
||
if ! kill -0 $monitor_pid 2>/dev/null; then
|
||
log_success "监控进程已强制停止"
|
||
stopped=true
|
||
fi
|
||
fi
|
||
else
|
||
log_warning "PID文件中的进程不存在"
|
||
fi
|
||
rm -f "$monitor_pid_file"
|
||
fi
|
||
|
||
# 通过进程名停止(备用方法)
|
||
if [ "$stopped" = false ]; then
|
||
log_info "通过进程名查找并停止监控进程..."
|
||
local pids=$(pgrep -f "monitor-services.sh" || true)
|
||
|
||
if [ -n "$pids" ]; then
|
||
for pid in $pids; do
|
||
log_info "停止监控进程 (PID: $pid)"
|
||
kill $pid 2>/dev/null || true
|
||
done
|
||
|
||
sleep 2
|
||
|
||
# 检查是否还有进程运行
|
||
local remaining_pids=$(pgrep -f "monitor-services.sh" || true)
|
||
if [ -n "$remaining_pids" ]; then
|
||
log_warning "强制停止剩余的监控进程..."
|
||
for pid in $remaining_pids; do
|
||
kill -9 $pid 2>/dev/null || true
|
||
done
|
||
fi
|
||
|
||
log_success "所有监控进程已停止"
|
||
stopped=true
|
||
else
|
||
log_info "未找到运行中的监控进程"
|
||
stopped=true
|
||
fi
|
||
fi
|
||
|
||
return 0
|
||
}
|
||
|
||
# 停止Docker服务
|
||
stop_services() {
|
||
log_info "停止Docker服务..."
|
||
|
||
if docker-compose ps -q | grep -q .; then
|
||
docker-compose down
|
||
log_success "Docker服务已停止"
|
||
else
|
||
log_info "没有运行中的Docker服务"
|
||
fi
|
||
}
|
||
|
||
# 清理日志文件
|
||
cleanup_logs() {
|
||
local cleanup_logs=$1
|
||
|
||
if [ "$cleanup_logs" = true ]; then
|
||
log_info "清理监控日志文件..."
|
||
|
||
local log_files=(
|
||
"./storage/logs/monitor.log"
|
||
"./storage/logs/monitor-output.log"
|
||
"./storage/logs/restart_counters"
|
||
)
|
||
|
||
for item in "${log_files[@]}"; do
|
||
if [ -f "$item" ]; then
|
||
rm -f "$item"
|
||
log_info "删除文件: $item"
|
||
elif [ -d "$item" ]; then
|
||
rm -rf "$item"
|
||
log_info "删除目录: $item"
|
||
fi
|
||
done
|
||
|
||
log_success "日志文件清理完成"
|
||
fi
|
||
}
|
||
|
||
# 显示使用帮助
|
||
show_help() {
|
||
echo "停止Docker服务监控脚本"
|
||
echo ""
|
||
echo "用法: $0 [选项]"
|
||
echo ""
|
||
echo "选项:"
|
||
echo " --stop-services 同时停止Docker服务"
|
||
echo " --cleanup-logs 清理监控日志文件"
|
||
echo " --all 停止监控、服务并清理日志"
|
||
echo " -h, --help 显示此帮助信息"
|
||
echo ""
|
||
echo "默认情况下,此脚本只停止监控进程,不影响Docker服务。"
|
||
}
|
||
|
||
# 主函数
|
||
main() {
|
||
local stop_services_flag=false
|
||
local cleanup_logs_flag=false
|
||
|
||
# 解析命令行参数
|
||
while [[ $# -gt 0 ]]; do
|
||
case $1 in
|
||
--stop-services)
|
||
stop_services_flag=true
|
||
shift
|
||
;;
|
||
--cleanup-logs)
|
||
cleanup_logs_flag=true
|
||
shift
|
||
;;
|
||
--all)
|
||
stop_services_flag=true
|
||
cleanup_logs_flag=true
|
||
shift
|
||
;;
|
||
-h|--help)
|
||
show_help
|
||
exit 0
|
||
;;
|
||
*)
|
||
echo "未知选项: $1"
|
||
show_help
|
||
exit 1
|
||
;;
|
||
esac
|
||
done
|
||
|
||
echo "========================================"
|
||
echo "停止Docker服务监控"
|
||
echo "时间: $(date)"
|
||
echo "========================================"
|
||
|
||
# 执行停止操作
|
||
stop_monitoring
|
||
|
||
if [ "$stop_services_flag" = true ]; then
|
||
stop_services
|
||
fi
|
||
|
||
cleanup_logs "$cleanup_logs_flag"
|
||
|
||
echo ""
|
||
log_success "操作完成"
|
||
|
||
if [ "$stop_services_flag" = false ]; then
|
||
log_info "Docker服务仍在运行,使用 'docker-compose down' 停止服务"
|
||
fi
|
||
}
|
||
|
||
# 如果脚本被直接执行
|
||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
||
main "$@"
|
||
fi |