Files
KnowledgeBase/docker/stop-monitoring.sh
lizhuoran 3c206e9e06 feat: 新增 Docker 部署支持、Swoole/Octane 集成及相关优化
- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境)
- 集成 Laravel Octane (Swoole) 提升性能
- 新增健康检查、监控脚本及部署文档
- 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch)
- 优化文档转换、预览服务及队列任务
- 添加 CreateAdminUser 命令与路由健康检查接口
- 新增 Swoole 队列兼容性测试套件

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 15:51:19 +08:00

210 lines
5.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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