我正在 Django 中开发一个网页(使用 apache 服务器),需要调用 shell 命令来启用/禁用一些守护进程。我尝试这样做
os.system(service httpd restart 1>$HOME/out 2>$HOME/error)
并且该命令不返回任何内容。知道如何解决这个问题吗?
我将跳过我强烈建议您了解 Web 应用程序启动和停止系统进程的影响的部分,并尝试回答这个问题。
你的 django 应用程序不应该运行root用户,可能需要启动和停止服务。您可能可以通过以下方式克服这个问题:
- 创建一个使用的脚本seteuid http://docs.python.org/library/os.html
- 给该文件设置 uid 属性
脚本会是这样的
#!/usr/bin/python <- or wherever your python interpreter is
import os
os.seteuid(0)
os.system("service httpd restart 1>$HOME/out 2>$HOME/error")
要允许将有效 UID 设置为 root (0),您必须在 shell 中以 root 身份运行:
chown root yourscript.py
chmod u+s yourscript.py
chmod a+x yourscript.py
应该可以做到这一点。在你的 Django 应用程序中你现在可以调用os.system('yourscript.py')
以 root 权限运行命令。
最后,我相信你传递给的命令os.system()
不是你要找的,因为你谈论启用和禁用守护进程,而你所做的只是重新启动 apache...这反过来似乎是你的 django 运行的地方,所以在实践中你会杀死您自己的网络应用程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)