django celery+阿里云,关掉ssh之后就无法启动任务了

我用django+celery想实现异步任务,在阿里云上用Nginx+uwsgi配置了django的服务器,然后按照下面这个连接的的方案做了celery的配置
https://blog.csdn.net/qq_53582111/article/details/120207740%EF%BC%88Django 中celery的使用)

做到了第6步,通过ssh连接到阿里云服务器,启动celery之后,就可以正常通过主任务调用tasks.py中的任务了

启动后的页面如下

img

然后一切正常使用,但是,但是一旦我在本地电脑上,把这个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 进程:

  1. 安装 Supervisor

在服务器上执行以下命令:

sudo apt-get update
sudo apt-get install supervisor
  1. 配置 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/projectyour_username 分别为你自己的路径和用户名。

  1. 重载 Supervisor 配置

在服务器上执行以下命令:

sudo supervisorctl reread
sudo supervisorctl update
  1. 启动 Celery Worker

在服务器上执行以下命令:

sudo supervisorctl start celery_worker

现在,即使你断开 SSH 连接,Celery Worker 进程也会持久运行。

希望这能解决你的问题。
如果我的回答解决了您的问题,请采纳!

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    答:

    这是因为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进程的全部步骤。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^