我看到各种各样的线程,他们接受了答案,但我仍然坚持这个。
我有一个应该启动备份程序的视图,我把它恢复到视图返回的程度,并且该进程仍然在后台运行,但如果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.
提前致谢。
答案 0 :(得分:8)
您需要使用完全独立的备份进程。执行此操作的最佳方法是使用消息队列 - 视图将备份请求放入队列,并且单独的侦听器将其拾取并运行备份,而不依赖于Apache。
Celery是一个分布式任务管理器,可以为您处理所有这些问题,尽管使用RabbitMQ和Python AMQP库可以很容易地完成自己的工作。
答案 1 :(得分:2)
可能不那么优雅,但绝对最简单,我使用 at 命令安排我的流程“现在”。完成。
os.system("echo '/usr/bin/python /(somewhere)/scripts/backup/testbackup.py' | at now")