后台方式启动celery worker beats方式


在生产环境中,启动Celery Worker和Celery Beat通常确实是作为后台进程运行的,这样可以确保它们即使在SSH会话关闭后也能持续运行。以下是一些常用的方法来在后台启动这些进程:

  1. 使用screentmux: 这些工具允许你创建一个可断开连接的会话,即使SSH会话关闭,进程也会继续运行。

例如,使用screen

bash screen -S celery_worker celery -A your_project worker --loglevel=info

然后按Ctrl-A然后按D来断开连接。要重新连接到会话,使用:

bash screen -r celery_worker

使用tmux

bash tmux new -s celery_worker celery -A your_project worker --loglevel=info

然后按Ctrl-B然后按D来断开连接。要重新连接到会话,使用:

bash tmux attach -t celery_worker

  1. 使用nohupnohup命令可以让你的命令忽略挂起信号,即使终端关闭,进程也会继续运行。

例如:

bash nohup celery -A your_project worker --loglevel=info &

使用&将命令放到后台执行。输出默认会重定向到nohup.out文件。

  1. 使用systemd服务: 在现代Linux系统中,你可以创建systemd服务文件来管理Celery Worker和Beat进程。

创建一个名为celery-worker.service的文件:

```ini [Unit] Description=Celery Worker Service After=network.target

[Service] User=your_user Group=your_group WorkingDirectory=/path/to/your_project Environment="PATH=/path/to/your/virtualenv/bin" ExecStart=/path/to/your/virtualenv/bin/celery -A your_project worker --loglevel=info

[Install] WantedBy=multi-user.target ```

然后启用并启动服务:

bash sudo systemctl enable celery-worker.service sudo systemctl start celery-worker.service

对于Celery Beat,创建一个类似的celery-beat.service文件,并使用celery -A your_project beat --loglevel=info作为ExecStart

  1. 使用supervisordsupervisord是一个进程控制系统,可以用来管理Celery Worker和Beat进程。

创建一个名为celery.conf的配置文件:

```ini [program:celery-worker] command=/path/to/your/virtualenv/bin/celery -A your_project worker --loglevel=info user=your_user autostart=true autorestart=true stdout_logfile=/var/log/celery/worker.log stderr_logfile=/var/log/celery/worker.err

[program:celery-beat] command=/path/to/your/virtualenv/bin/celery -A your_project beat --loglevel=info user=your_user autostart=true autorestart=true stdout_logfile=/var/log/celery/beat.log stderr_logfile=/var/log/celery/beat.err ```

然后使用supervisord来管理这些进程: bash supervisord -c /path/to/celery.conf

这些方法可以帮助你在生产环境中稳定地运行Celery Worker和Beat进程。选择最适合你需求的方法来确保你的任务队列和定时任务能够可靠地执行。