使用PHP启动脚本时,在脚本中执行屏幕失败

时间:2015-10-11 12:45:03

标签: linux ubuntu php gnu-screen

我正在使用php在我的服务器上执行脚本 PHP:exec("screen -dmS testingscreen /home/username/otherfolder/test.sh")
有一段时间我无法做到这一点,直到我做了一些挖掘并发现了一些关于如何做到这一点的事情。我还找到了一些关于我同时遇到的屏幕/小问题的其他事项。

我会详细说明我在上一期中遇到的每一个问题,但我似乎无法解决这个问题。

问题一(已解决):尝试在webroot之外运行脚本 主题:Excute script outside of web root with PHP.
解决方案:使用sudo chown www-data:www-data filename.sh授予我的Web用户访问脚本的权限。

问题二(已解决):当php文件调用时,脚本不执行任何操作 解决方案:使用chmod +x filename.sh制作脚本可执行文件 注意:当我在脚本目录中使用ls时,我做错了很明显。

问题三(已解决):无法通过www-data检查屏幕是否正在运行 错误:此帐户目前无法使用 问题:www-data在/bin/nologin中设置为/etc/passwd 解决方案:chsh -s /bin/bash www-data以便我可以将其切换为用户。

问题四(已解决):在su www-data中无法使用screen -r testingscreen
错误:无法打开终端'/ dev / pts / 0' - 请检查。
问题:权限,不在登录帐户下打开屏幕并尝试使用su帐户 解决方案:在尝试script /dev/null之前在终端中使用screen -r testingscreen

第五期(未解决):
执行screen -dmS testingscreen /home/username/anotherfolder/filename.sh时 使用php exec()确实制作了屏幕testingscreen

我在脚本文件中有一行说明了 screen -dmS scriptscreen mono '/home/username/otherfolder/myprogram.exe' 'programargs1' 'programargs2' 'args3' 'args4'
使用脚本“filename.sh”执行时,此屏幕无法运行 但是,与www-data用户执行相同的行(使用sudo su www-data作为该用户。)可以正常工作。

同样值得注意的是:运行screen -dmS testingscreen /home/username/otherfolder/test.sh的工作非常正常,并且应该像scriptscreen一样启动。这在使用sudo su www-data时有效,但如果我用php启动脚本则不行。

在更奇怪的一面,使用screen -dmS testingtop top在php启动的脚本文件中工作正常。我错过了一些明显的东西吗?

我已检查过文件权限,一切正常,应该可以正常工作。能够将我的程序作为www-data运行意味着可以很好地设置perms。它似乎与php或我的服务器有关。我们非常欢迎任何帮助或可能的提示,我希望我的详细问题+解决方案可以在一个帖子中帮助其他人。

1 个答案:

答案 0 :(得分:0)

由于您在调用sudo作为问题的一部分,我假设这是尝试让PHP执行具有root权限的脚本?

我最近发布了一个项目,允许PHP获取真正的Bash shell并与之交互。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

//if I misunderstood your question and the script does not require 
//root permissions you can change the
//second argument on getShell() to false. That will return a bash shell
//with permissions from www-data.

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('/home/username/otherfolder/test.sh');