我用django+celery想实现异步任务,在阿里云上用Nginx+uwsgi配置了django的服务器,然后按照下面这个连接的的方案做了celery的配置
https://blog.csdn.net/qq_53582111/article/details/120207740%EF%BC%88Django 中celery的使用)
做到了第6步,通过ssh连接到阿里云服务器,启动celery之后,就可以正常通过主任务调用tasks.py中的任务了
启动后的页面如下
然后一切正常使用,但是,但是一旦我在本地电脑上,把这个ssh界面关闭之后,celery就停止了(?),反正就是无法调用tasks.py中的任务了,但是主任务缺让然是正常可以运行的,怎么回事?
这是因为你的celery是在ssh的连接会话中执行的,ssh连接关闭后,celery也就自然的停止了。这其中的原理简单的来说就是,ssh 打开以后,你使用的bash等都是他的子程序,一旦ssh关闭,系统将所有相关进程杀掉!! 导致一旦ssh关闭,执行中的任务就取消了。解决方法就是使用nohup 使你的命令在后台执行使用格式一般为:
nohup 你要执行的命令 &
引用new bing部分回答作答:
根据您的描述,问题可能是由于 Celery worker 进程在通过 SSH 连接启动时,其实是在 SSH 会话中运行的,关闭 SSH 会话就会停止进程。
为了避免这个问题,您可以使用 nohup 命令将 Celery worker 进程作为后台进程运行。nohup 命令可以在退出终端或关闭 SSH 连接时继续运行进程。您可以将以下命令用于启动 Celery worker:
nohup celery -A your_project_name worker -l info &
此命令将 Celery worker 进程作为后台进程运行,并将日志级别设置为 info。
另外,您还可以考虑使用 supervisor 或 systemd 等工具来管理 Celery worker 进程,以确保其在后台持续运行。
nohup celery -A proj worker -l info &
nohup 。。。& 这是可以让你的项目后台运行 日志输出到nohup 的命令
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
这是由于 Celery Worker 进程使用的 shell 是通过 ssh 终端启动的,终端关闭之后就会自动关闭 Celery Worker 进程。所以,为了让 Celery Worker 持久运行,我们需要在服务器上配置 Celery Worker 进程的守护进程。
以下是一个简单的方法,你可以在服务器上使用 Supervisor 配置 Celery Worker 进程:
在服务器上执行以下命令:
sudo apt-get update
sudo apt-get install supervisor
创建一个新的 Supervisor 配置文件:/etc/supervisor/conf.d/celery_worker.conf
[program:celery_worker]
command=/usr/bin/env python3 manage.py celery worker --loglevel=INFO
directory=/path/to/your/project
user=your_username
autostart=true
autorestart=true
redirect_stderr=true
注意替换文件中的 /path/to/your/project
和 your_username
分别为你自己的路径和用户名。
在服务器上执行以下命令:
sudo supervisorctl reread
sudo supervisorctl update
在服务器上执行以下命令:
sudo supervisorctl start celery_worker
现在,即使你断开 SSH 连接,Celery Worker 进程也会持久运行。
希望这能解决你的问题。
如果我的回答解决了您的问题,请采纳!
答:
这是因为ssh连接关闭后,celery进程也随之终止。要解决这个问题,可以使用Supervisor来守护celery进程,使得celery能在后台持续运行。
具体步骤如下:
1.安装Supervisor
首先安装Supervisor:
$ sudo apt-get update
$ sudo apt-get install supervisor
2.创建Supervisor配置文件
在/etc/supervisor/conf.d/目录下创建一个新的配置文件,并将下面的内容复制到文件中:
[program:celery]
command=/usr/local/bin/celery -A <your_project_name> worker -l info
directory=/path/to/your/project
user=<your_username>
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/celery/worker.log
注意,要将以上脚本中的、/path/to/your/project、替换成你项目的相关信息。
3.启动Supervisor
现在,Supervisor的配置文件已经完成,可以启动它并启动celery进程:
$ sudo supervisorctl reread
$ sudo supervisorctl update
$ sudo supervisorctl start celery
现在,即使在ssh界面关闭后,celery进程也会在后台持续运行。
以上就是使用Supervisor守护celery进程的全部步骤。