我有一个python脚本chatserver.py,其中包括: -
#!/usr/bin/python
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
<SNIP>
reactor.listenTCP(3800, factory)
print "Server Started"
reactor.run()
这会在端口3800上打开一个套接字,如果我从SSH启动但是我想检查开放端口,如果它是关闭的,请使用PHP重启,但我似乎无法让python脚本执行。
以下是我目前通过PHP调用它的方式
function serverCheck() {
$host = "MYHOST";
$port = 3800;
$connection = @fsockopen($host, $port);
if ( !is_resource($connection) ) { // port not open
exec('/usr/bin/python PATH_TO_FILE/chatserver.py 2>&1');
if($connection)
fclose($connection);
}
我已经尝试了很多我在搜索中找到的东西,但我似乎无法让文件执行。
答案 0 :(得分:1)
看起来像是权限问题。 chatserver.py
目前需要root
用户才能运行它。
不要只是chmod 777 chatserver.py
。这很危险。
我喜欢的方法是为这些管理任务创建一个组:
groupadd chatserver
然后将自己添加到该组:
usermod -a -G chatserver willroberts
然后将chatserver.py
更改为该组所有:
chown root:chatserver chatserver.py
当您的用户运行php时,它将具有正确的组成员资格来运行py文件。此方法为更多“聊天服务器”可执行文件提供了更大的灵活性。如果您有兴趣,请阅读以下内容:https://wiki.archlinux.org/index.php/Users_and_Groups和http://www.tldp.org/LDP/intro-linux/html/sect_03_04.html
答案 1 :(得分:0)
问题得到解决:)
最后是shebang:|我知道......我觉得自己很蠢!
应该是#!/ usr / bin / python但是出于某种原因我已经通过各种测试来改变它了!
感谢您的帮助。非常感谢!