在生产环境中,启动Celery Worker和Celery Beat通常确实是作为后台进程运行的,这样可以确保它们即使在SSH会话关闭后也能持续运行。以下是一些常用的方法来在后台启动这些进程:
- 使用
screen
或tmux
: 这些工具允许你创建一个可断开连接的会话,即使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
- 使用
nohup
:nohup
命令可以让你的命令忽略挂起信号,即使终端关闭,进程也会继续运行。
例如:
bash
nohup celery -A your_project worker --loglevel=info &
使用&
将命令放到后台执行。输出默认会重定向到nohup.out
文件。
- 使用
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
。
- 使用
supervisord
:supervisord
是一个进程控制系统,可以用来管理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进程。选择最适合你需求的方法来确保你的任务队列和定时任务能够可靠地执行。