84 lines
2.4 KiB
Bash
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 ""
|