我在使用apache webserver作为www-data调用bash脚本时遇到问题。
当我从服务器调用它时出现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()
非常感谢!
答案 0 :(得分:0)
请确保apache可以使用此脚本访问该文件夹。
尝试使用脚本的完整路径。
如果你使用python脚本,请确保脚本是可执行的,它有#! “shebang”在第一线。
答案 1 :(得分:0)
关于你的Q1:
作为www-data执行sudo调用之间的区别是什么? 调用脚本与实际调用脚本为www-data 通过网络服务器?
我想说,从操作系统提示符运行sudo
,您可以在发生故障或丢失时收到更多信息,而有时从浏览器或程序langage shell调用运行,您可能只是即使命令从未运行,也不会收到任何反馈。
和Q2:
我可以获得实际的服务器调用以获得与sudo相同的输出 调用
不确定在python中是怎么做的,但是在php中你有两个指令:exec
和shell_exec
,使用第二个指令,你可以得到一个输出作为一个返回值。