Ubuntu 16.04.3下Celery重启脚本仅杀进程不启动的问题排查
解决Ubuntu 16.04.3下Celery重启脚本无法启动新进程的问题
我来帮你捋捋这个问题哈,你的脚本能成功杀死Celery进程,但启动不了新实例,大概率是这几个常见原因导致的:
权限不足问题:你脚本里指定了
--pidfile=/var/run/celery_pid,但/var/run目录默认是root用户拥有读写权限的。如果用普通用户身份执行这个脚本,Celery没法在这个目录下创建pid文件,直接就启动失败了。建议把pid文件路径改成/tmp/celery_pid,或者用sudo执行整个脚本。环境或路径问题:
- 你用了
--workdir=pwd``,但脚本执行时的当前工作目录可能不是你的项目根目录,导致Celery找不到loan_app.tasks这个模块。最好在脚本里明确切换到项目目录,比如加一行cd /你的项目绝对路径。 - 如果你的Celery是安装在虚拟环境里的,脚本里没激活虚拟环境的话,系统可能找不到
celery命令,或者找不到项目依赖的模块,自然启动失败。记得在启动命令前加上虚拟环境激活的命令,比如source /path/to/venv/bin/activate。
- 你用了
日志排查是关键:你已经指定了
--logfile=/tmp/celery.log,直接去查看这个日志文件,里面肯定有启动失败的具体错误信息——比如权限报错、模块找不到、端口被占之类的,这是最快定位问题的方法。
给你一个调整后的脚本示例,你可以根据自己的实际情况修改:
#!/bin/bash # 清理Celery进程,添加2>/dev/null避免没有进程时的报错 ps -ef | grep celery | awk '{print $2}' | grep -v grep | xargs kill -9 2>/dev/null # 切换到你的项目根目录(替换成实际路径) cd /home/your_user/your_loan_app_project # 如果用了虚拟环境,激活它(取消下面的注释并修改路径) # source /home/your_user/venv/bin/activate # 启动Celery,把pid文件放到/tmp避免权限问题 celery -A loan_app.tasks worker --loglevel=info --workdir=`pwd` --logfile=/tmp/celery.log --pidfile=/tmp/celery_pid -D
内容的提问来源于stack exchange,提问作者Yang
相关产品推荐
相关产品推荐

