You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在服务器创建cron定时任务实现Celery自动重启

Celery 进程异常退出自动拉起方案

按以下步骤配置即可实现每15分钟检查一次Celery状态,进程不存在时自动启动:

  • 第一步:编写监控脚本
    在服务器上创建监控脚本文件,路径建议放在应用用户家目录下,比如/home/myapp/celery_monitor.sh,写入以下内容:
#!/bin/bash
# 检查目标Celery worker进程是否存活
ps axuww | grep -v grep | grep "celery -A app.mycelery worker" > /dev/null
if [ $? -ne 0 ]; then
    # 加载虚拟环境、进入项目目录后后台启动Celery
    source /home/myapp/virtualenv/app/3.8/bin/activate
    cd /home/myapp/app
    celery -A app.mycelery worker --concurrency=4 --loglevel=INFO -f celery.log --detach
fi

保存后给脚本加可执行权限:
chmod +x /home/myapp/celery_monitor.sh

  • 第二步:配置定时任务
    用启动Celery的业务用户(也就是平时手动启动用的myapp用户,不要用root避免权限冲突)执行crontab -e编辑当前用户的定时任务表,在末尾追加以下配置:
*/15 * * * * /bin/bash /home/myapp/celery_monitor.sh >> /home/myapp/celery_monitor.log 2>&1

保存退出后cron会自动加载新配置,不需要重启服务。

  • 验证配置
    可以先手动执行pkill -f "celery -A app.mycelery worker"停掉现有Celery进程,再运行/bin/bash /home/myapp/celery_monitor.sh,执行完用ps axuww|grep celery检查,能看到对应worker进程就说明脚本逻辑正常。后续每15分钟cron会自动触发一次检查,执行日志会存在/home/myapp/celery_monitor.log里,出问题可以直接查这个日志定位。

注意:不要把长命令直接写在cron配置里,cron运行时默认加载的环境变量非常精简,不会自动识别虚拟环境路径,也不会默认切换到项目目录,独立写脚本的方式稳定性高很多,后续调整启动参数也更方便。匹配进程时加grep -v grep是为了过滤grep命令自身的进程,避免误判Celery处于运行状态。

内容的提问来源于stack exchange,提问作者derikS4M1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:06:30