如何从django / wsgi中调用bash进程?

我正在为
django网站使用mod_wsgi apache2适配器,我喜欢在视图中调用一些bash进程,使用通常的

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

这个代码在通常的python shell中完美运行,但在django中调用时什么都不做(我现在可以追踪).我错过了一些wsgi约束吗?该脚本有755个烫发,所以它应该是可执行的.

快速测试

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

揭示它甚至不执行琐碎的命令.我现在没有想法,并感谢任何意见.

谢谢.

最佳答案 脚本本身可能具有755个权限,但它调用的内容可能没有正确的权限.特别是如果你在端口80上运行tomcat,这是一个特权端口.

有很多方法可以解决这类问题(setuid,sudo),但你最好知道自己在做什么.

我将更改您的Popen调用以打开另一个脚本,其内容日期为>> /home/example.com/test.txt只是为了查看它是否正在执行它,然后您可以担心尝试调试权限.

点赞