推荐用supervisord守护Grok进程,通过配置autorestart、startsecs=15等参数实现自动拉起和防误判重启;国产系统首选systemd并设置OOMScoreAdjust=-900防OOM Kill;无root权限时可用Shell循环脚本保活。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

Grok模型服务运行到一半突然退出,导致推理请求失败、WebUI白屏、长时间等待无响应,必须立即恢复服务可用性。这不是偶然事件,而是大模型服务在内存压力、CUDA上下文异常或Python GC抖动下常见的稳定性缺口。
用supervisord守护Grok进程(推荐方案)
这一步操作起来很简单,直接把Grok启动命令交给supervisord管理即可,无需修改任何业务代码。
第一步:确认supervisord已安装并运行
执行sudo supervisorctl status,若提示FATAL或Connection refused,则先运行sudo supervisord -c /etc/supervisord.conf启动守护主进程。
第二步:在/etc/supervisord.d/目录下新建配置文件
执行sudo nano /etc/supervisord.d/grok-webui.conf,填入以下内容:
[program:grok-webui]
command=/root/grok-webui/start.sh
directory=/root/grok-webui
autostart=true
autorestart=true
startsecs=15
stopwaitsecs=30
stderr_logfile=/var/log/grok-webui.err
stdout_logfile=/var/log/grok-webui.out
user=root
environment=PATH="/usr/local/bin:/usr/bin",HOME="/root"
【startsecs=15是关键】Grok WebUI初始化需加载大模型权重和构建Gradio界面,通常耗时8~12秒,设为15可避免supervisord误判启动失败而反复重启。
第三步:重载配置并启动
执行sudo supervisorctl reread && sudo supervisorctl update && sudo supervisorctl start grok-webui,此时服务将立即拉起并进入监控状态。
第四步:验证崩溃自动恢复能力
手动杀死进程:sudo supervisorctl stop grok-webui → 等待5秒 → 执行ps aux | grep start.sh,应看到新进程PID已变更;再用curl http://localhost:7860测试接口是否恢复响应。
systemd原生服务方式(麒麟OS/国产系统首选)
如果你使用的是银河麒麟V10 SP1或统信UOS Server 20,systemd比supervisord更深度集成,且支持OOMScoreAdjust防止被OOM Killer优先干掉。
方法一:创建服务单元文件
执行sudo nano /etc/systemd/system/grok-webui.service,写入:
[Unit]
Description=Grok WebUI Service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
User=root
WorkingDirectory=/root/grok-webui
ExecStart=/root/grok-webui/start.sh
Restart=always
RestartSec=8
MemoryLimit=12G
OOMScoreAdjust=-900
KillMode=control-group
[Install]
WantedBy=multi-user.target
【OOMScoreAdjust=-900是关键】该值让内核在内存不足时尽量保留Grok进程,避免因OOM Kill导致服务不可预测中断。
方法二:启用并启动服务
依次执行:sudo systemctl daemon-reload → sudo systemctl enable --now grok-webui.service → sudo systemctl status grok-webui.service,确认状态显示active (running)。
轻量级Shell循环守护(无root权限场景)
当你只有普通用户权限、无法安装supervisord或修改systemd时,可用纯Shell脚本实现最小闭环守护。
在/home/yourname/grok-guard.sh中写入:
#!/bin/bash
cd /home/yourname/grok-webui
while true; do
if ! pgrep -f "start.sh" > /dev/null; then
echo "$(date): Grok process missing, restarting..." >> /home/yourname/grok-guard.log
nohup ./start.sh > /dev/null 2>&1 &
fi
sleep 10
done
赋予执行权限:chmod +x /home/yourname/grok-guard.sh
后台启动守护:nohup /home/yourname/grok-guard.sh > /dev/null 2>&1 &
注意:此脚本每10秒轮询一次进程是否存在,不依赖信号机制,但无法感知“假死”(进程仍在但无响应),仅适用于基础保活。


















