我在使用apache webserver调用bash脚本作为www-data时遇到了一个问题。
当我从服务器调用它时,我得到了一个IO错误,它没有给我整个程序的输出,但是只有我在脚本中创建的文件的']没有这样的文件或目录‘,大约在脚本中途。
所以我想查看更多细节,我认为这是一种以完全相同的方式运行程序的方法,但只是通过终端,这样我就可以看到更多的输出:
sudo -u www-data ./bashscript
然而,在这样做之后,我没有得到任何错误,并且我的bash脚本完全完成了。
那么,作为www-data调用sudo,调用脚本与通过web服务器实际调用脚本作为www-data有什么不同呢?更重要的是,我可以获得实际的服务器调用,以获得与sudo调用相同的输出?
我现在在我的网页上使用python cgi,所以我只是使用子进程来进行系统调用,以下是我的代码,尽管我不认为这是问题所在:
w = subprocess.Popen("./nameofscript", stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
for line in w.stdout.readlines():
print line
kill = w.wait()非常感谢!
发布于 2014-12-14 15:14:12
请确保apache有权使用此脚本访问文件夹。
尝试使用脚本的完整路径。
如果您使用python脚本,请确保该脚本是可执行的,并且带有#!"shebang“在第一行。
发布于 2016-08-14 07:22:33
关于您的Q1:
将sudo调用作为www-data,调用脚本与通过web服务器实际调用脚本作为www-data有什么不同?
我要说的是,在操作系统提示符下以sudo身份运行时,当发生故障或未命中时,您可以接收到更多信息,而有时从浏览器或程序语言shell调用运行,即使命令从未运行,您也可能无法收到任何反馈。
和Q2:
我可以获得实际的服务器调用,以获得与sudo调用相同的输出吗?
不知道如何在python中做到这一点,但在php中你有这两条指令:exec和shell_exec,使用第二条指令,你可能会得到一个返回值的输出。
https://stackoverflow.com/questions/27466634
复制相似问题