2010-04-09 10 views
4

我使用mod_wsgi的Apache2的適配器Django的網站,我喜歡叫一個視圖中的一些慶典過程中,採用通常的如何從django/wsgi中調用bash進程?

... 
p = subprocess.Popen("/home/example.com/restart-tomcat.sh", shell=True) 
sts = os.waitpid(p.pid, 0)[1] 
... 

此代碼工作完全從一個普通的Python外殼內,但什麼都不做(我現在可以跟蹤)在Django中調用時。我是否缺少一些wsgi約束?該腳本有755燙髮,所以它應該是可執行的。

快速測試

p = subprocess.Popen("date >> home/example.com/wsgi-test.txt", shell=True) 
sts = os.waitpid(p.pid, 0)[1] 

表明,它甚至不執行普通的命令。我目前沒有任何意見,並且非常感謝任何意見。

謝謝。

回答

2

該腳本本身可能擁有755個權限,但它調用的內容可能沒有正確的權限。特別是如果你有tomcat運行在端口80上,這是一個特權端口。

有許多方法可以解決這類問題(setuid,sudo),但您最好確切地知道您在做什麼。

我會改變你的Popen調用來打開一個不同的腳本,其內容date >> /home/example.com/test.txt只是爲了看它是否正在執行它,然後你可以擔心試圖調試權限。

+0

謝謝,做了一個測試;它似乎沒有執行任何操作,它甚至不會引發任何OSError .. Tomcat運行在非挑釁的端口上,所以這應該不是問題 – chang 2010-04-09 15:25:54

+0

我幾乎想問你是否可以像打開常規文件在該路徑使用python文件io,'h = open('/ home/example.com/test.txt','a'); h.write( '線\ n'); h.close();'。真的很奇怪,如果所有的權限都是正確的。它應該工作。 – synic 2010-04-09 15:31:36

+0

謝謝您的評論。我正在檢查所有權限的過程中,尤其是那些需要一個適當的tomcat重新啓動.. – chang 2010-04-09 15:49:40

0

寫到標準輸出

這裏:http://code.google.com/p/modwsgi/wiki/ApplicationIssues

這是否適用於此?我正在研究類似的問題....  

+0

如果您使用的是mod_wsgi 3.X,那麼不會,因爲沒有人想寫可移植代碼,所以限制被解除了。見'http://blog.dscpl.com.au/2009/04/wsgi-and-printing-to-standard-output.html'。 – 2010-08-09 04:51:09