2010-11-17 23 views
3

我看到各種類似的線程,他們已經接受了答案,但我仍然堅持這一點。從django執行不能被Web服務器中斷的後臺進程

我應該啓動備份程序的圖,我就到了點,其視圖回報,進程仍然在後臺運行,但是如果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. 

在此先感謝。

回答

2

也許不那麼高雅,但絕對是最簡單的,我安排我的程序爲「現在」與命令。完成。

os.system("echo '/usr/bin/python /(somewhere)/scripts/backup/testbackup.py' | at now") 
8

您需要爲備份使用完全獨立的進程。做到這一點的最佳方式是使用消息隊列 - 視圖將備份請求放入隊列中,並且單獨的偵聽器將其選中並運行備份,而不依賴於Apache。

Celery是一個分佈式任務管理器,爲您處理所有這些問題,但使用RabbitMQ和Python AMQP庫可以很容易地推出自己的應用。

+0

我明白這一點,但它不適合。我不想安裝一個庫來完成我知道我的系統必須能夠完成的工作。 – andyortlieb 2010-11-18 18:31:46

+2

您的系統可以執行此操作,但不能檢查操作的結果,確保最終操作成功,或者執行此類任務時所需的任何其他操作。是的,你必須安裝一些額外的庫,但與Django本身相比,芹菜+ rabbitMQ是瑣碎的。 – 2010-11-18 18:42:55

相關問題