从django执行后台进程,不能被Web服务器中断

and*_*ieb 3 python linux apache django background

我看到各种各样的线程,他们接受了答案,但我仍然坚持这一点.

我有一个视图,应该启动一个备份过程,我得到它到视图返回的点,并且该过程仍然在后台运行,但是如果重新启动apache,则备份过程就会消失.

def partStartJob(request):
    import subprocess
    p=subprocess.Popen(['/usr/bin/nohup','/usr/bin/python', '/(somewhere)/scripts/backup/testbackup.py'] )
    # FIXME: This process dies when apache restarts.
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Dan*_*man 8

您需要使用完全独立的备份过程.执行此操作的最佳方法是使用消息队列 - 视图将备份请求放在队列中,并且单独的侦听器将其拾取并运行备份,而不依赖于Apache.

Celery是一个分布式任务管理器,可以为您处理所有这些,尽管使用RabbitMQ和Python AMQP库可以很容易地完成自己的工作.

  • 您的系统可以执行此操作,但它不能检查操作的结果,确保最终操作成功,或者您希望使用此类任务执行的任何其他操作.是的,你必须安装一些额外的库,但与Django本身相比,celery + rabbitMQ是琐碎的. (2认同)