Files
ai_baijiahao/stop.sh

84 lines
2.4 KiB
Bash

#!/bin/bash
###############################################################################
# 百家号爬虫系统 - 停止脚本
# 功能:停止服务及所有任务线程
###############################################################################
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 项目配置
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
APP_PORT=8030
PID_FILE="${PROJECT_DIR}/app.pid"
GUNICORN_PID_FILE="${PROJECT_DIR}/gunicorn.pid"
echo -e "${YELLOW}=========================================${NC}"
echo -e "${YELLOW} 停止百家号爬虫服务${NC}"
echo -e "${YELLOW}=========================================${NC}"
echo ""
# 通过 PID 文件停止
if [[ -f "${PID_FILE}" ]]; then
PID=$(cat ${PID_FILE})
if ps -p ${PID} > /dev/null 2>&1; then
echo "停止主进程 (PID: ${PID})..."
kill ${PID} 2>/dev/null
sleep 2
# 如果还在运行,强制终止
if ps -p ${PID} > /dev/null 2>&1; then
echo "强制终止主进程..."
kill -9 ${PID} 2>/dev/null
fi
echo -e "${GREEN}${NC} 主进程已停止"
fi
rm -f ${PID_FILE}
fi
# 停止 Gunicorn
if [[ -f "${GUNICORN_PID_FILE}" ]]; then
GUNICORN_PID=$(cat ${GUNICORN_PID_FILE})
if ps -p ${GUNICORN_PID} > /dev/null 2>&1; then
echo "停止 Gunicorn 进程 (PID: ${GUNICORN_PID})..."
kill ${GUNICORN_PID} 2>/dev/null
sleep 2
if ps -p ${GUNICORN_PID} > /dev/null 2>&1; then
echo "强制终止 Gunicorn..."
kill -9 ${GUNICORN_PID} 2>/dev/null
fi
echo -e "${GREEN}${NC} Gunicorn 进程已停止"
fi
rm -f ${GUNICORN_PID_FILE}
fi
# 清理所有 app.py 进程
APP_PIDS=$(ps aux | grep "[p]ython.*app.py" | awk '{print $2}')
if [[ -n "${APP_PIDS}" ]]; then
echo "清理所有相关进程..."
for pid in ${APP_PIDS}; do
echo " 停止进程 ${pid}..."
kill -9 ${pid} 2>/dev/null
done
echo -e "${GREEN}${NC} 所有进程已清理"
else
echo -e "${GREEN}${NC} 未发现运行中的进程"
fi
# 清理端口占用
PORT_PID=$(lsof -ti:${APP_PORT} 2>/dev/null)
if [[ -n "${PORT_PID}" ]]; then
echo "释放端口 ${APP_PORT}..."
kill -9 ${PORT_PID} 2>/dev/null
echo -e "${GREEN}${NC} 端口已释放"
fi
echo ""
echo -e "${GREEN}服务已完全停止!${NC}"
echo ""