使用Supervisord后台启动Celery服务(worker/beat)
前言
Django项目中通常会使用Celery来进行后台任务的处理,但如果我们直接使用命令行启动,那么当我们关闭终端或者终端断开时,Celery服务也会随之停止。为了解决这个问题,我们可以使用Supervisord来实现后台运行Celery服务的目的。
安装Supervisord
首先需要安装Supervisord,可以使用pip进行安装:
pip install supervisor
配置Supervisord
- 首先需要生成配置文件:
echo_supervisord_conf > /etc/supervisord.conf
- 接着编辑配置文件,添加以下内容(示例中的
projectname
请替换为你自己的项目名):
[program:worker]
command=/path/to/venv/bin/celery worker -A projectname --loglevel=info --concurrency=4 -Ofair
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-worker.log
stderr_logfile=/path/to/projectdir/logs/celery-worker-error.log
[program:beat]
command=/path/to/venv/bin/celery beat -A projectname --loglevel=info --pidfile=/tmp/celerybeat.pid
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-beat.log
stderr_logfile=/path/to/projectdir/logs/celery-beat-error.log
以上配置文件中分别配置了一个名字为worker的Celery worker和一个名字为beat的Celery beat,其中需要修改的地方主要有以下几个参数:
- command
:Celery命令的具体内容,需要替换为自己项目中Celery的启动命令。
- directory
:你的项目在服务器中的具体路径。
- user
: 运行程序的用户,默认为root用户,需要根据自己的服务器配置修改。
- stdout_logfile
和stderr_logfile
:输出的日志文件路径,需要替换成自己项目中的日志路径。
启动Supervisord服务
- 首先需要生成Supervisord service文件:
echo_supervisord_conf > /etc/systemd/system/supervisord.service
- 编辑Supervisord service文件:
[Unit]
Description=Supervisor daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl shutdown
ExecReload=/usr/local/bin/supervisorctl reload
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
- 启动Supervisord服务:
systemctl daemon-reload
systemctl start supervisord
systemctl enable supervisord
示例说明
以下为两个使用Supervisord后台启动Celery服务的示例:
示例一
假设我们需要在Django项目中使用Celery处理异步任务,在Linux服务器上执行,我们可以按以下步骤使用Supervisord后台启动Celery worker和beat:
- 先使用pip安装Celery:
pip install Celery
- 创建Django项目,并配置Celery
- 编写Supervisord的配置文件:
[program:worker]
command=/path/to/venv/bin/celery worker -A projectname --loglevel=info --concurrency=4 -Ofair
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-worker.log
stderr_logfile=/path/to/projectdir/logs/celery-worker-error.log
[program:beat]
command=/path/to/venv/bin/celery beat -A projectname --loglevel=info --pidfile=/tmp/celerybeat.pid
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-beat.log
stderr_logfile=/path/to/projectdir/logs/celery-beat-error.log
- 保存文件并重启Supervisord服务:
systemctl restart supervisord
- 通过Supervisord的Web管理界面查看worker和beat的状态:
http://服务器IP地址:9001
示例二
假设我们已经有了一个运行在Linux服务器上的Django项目,并且已经配置了Celery处理异步任务,我们可以按以下步骤使用Supervisord后台启动Celery worker和beat:
- 先安装Supervisord:
pip install supervisor
- 编辑Supervisord配置文件:
sudo vim /etc/supervisord.conf
- 添加以下内容:
[program:worker]
command=/path/to/venv/bin/celery worker -A projectname --loglevel=info --concurrency=4 -Ofair
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-worker.log
stderr_logfile=/path/to/projectdir/logs/celery-worker-error.log
[program:beat]
command=/path/to/venv/bin/celery beat -A projectname --loglevel=info --pidfile=/tmp/celerybeat.pid
directory=/path/to/projectdir
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/path/to/projectdir/logs/celery-beat.log
stderr_logfile=/path/to/projectdir/logs/celery-beat-error.log
- 保存文件并重启Supervisord服务:
systemctl restart supervisord
- 通过Supervisord的Web管理界面查看worker和beat的状态:
http://服务器IP地址:9001
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python测试开发django之使用supervisord 后台启动celery 服务(worker/beat) - Python技术站