44 lines
1.8 KiB
Bash
44 lines
1.8 KiB
Bash
#!/bin/bash
|
||
# 系统级排查:Gunicorn 是否双开、是否用了错误的 sync 配置
|
||
set -e
|
||
echo "========== Gunicorn 进程(看 worker_class / 是否双开)=========="
|
||
pgrep -af gunicorn || echo "无 gunicorn"
|
||
|
||
echo ""
|
||
echo "========== 8001 端口占用 =========="
|
||
ss -ltnp 2>/dev/null | grep 8001 || netstat -ltnp 2>/dev/null | grep 8001 || echo "8001 未监听"
|
||
|
||
echo ""
|
||
echo "========== systemd 实际启动命令 =========="
|
||
systemctl cat gunicorn-dianjing.service 2>/dev/null | grep -E '^ExecStart|^Environment' || echo "无 systemd service"
|
||
|
||
echo ""
|
||
echo "========== gunicorn.conf.py 关键项 =========="
|
||
CONF="/opt/1panel/apps/openresty/nginx/www/sites/43.142.166.152.443/django/gunicorn.conf.py"
|
||
if [ -f "$CONF" ]; then
|
||
grep -E 'worker_class|workers|threads|accesslog|errorlog|preload' "$CONF" | grep -v '^#'
|
||
else
|
||
echo "找不到 $CONF"
|
||
fi
|
||
|
||
echo ""
|
||
echo "========== 判定 =========="
|
||
NG=$(pgrep -cf 'gunicorn.*a_long_dianjing' 2>/dev/null || echo 0)
|
||
if [ "$NG" -gt 8 ]; then
|
||
echo ">>> 警告: gunicorn 进程过多($NG),可能 systemd + 1Panel 双开,必须只留 systemd"
|
||
fi
|
||
RECENT=$(grep -a 'Connection in use' /tmp/gunicorn-error.log 2>/dev/null | tail -1)
|
||
if [ -n "$RECENT" ]; then
|
||
echo ">>> 警告: error.log 曾出现 8001 端口冲突(双开 gunicorn):"
|
||
echo " $RECENT"
|
||
echo " 执行: bash deploy/fix-gunicorn-8001-conflict.sh"
|
||
fi
|
||
if grep -q 'worker_class.*sync' "$CONF" 2>/dev/null; then
|
||
echo ">>> 致命: gunicorn.conf.py 仍是 sync,全站会卡死,必须改为 gthread 并 restart"
|
||
fi
|
||
if grep -q 'accesslog.*"-' "$CONF" 2>/dev/null || grep -q "accesslog = '-'" "$CONF" 2>/dev/null; then
|
||
echo ">>> 致命: accesslog 输出到 stdout,会灌 journal 卡整机"
|
||
fi
|
||
echo ""
|
||
echo "正确做法: 1Panel 关闭 Python 自动管理 → git pull → bash deploy/safe-deploy.sh"
|