2012-03-23 41 views
0

我送屏幕命令为PHP,但我怎样才能解决这个屏幕> PHP>无屏幕会发现

例如

<?php 
system("screen -S screen444 -X -p0 eval 'stuff \"restart\"^m'") 
?> 

我送这个命令

错误:没有屏幕会话发现。

但屏幕运行

任何想法?

感谢

+0

除了我不知道你在说什么的事实,在我看来这是一个系统管理员的问题? – markus 2012-03-23 14:02:35

+0

你是从浏览器还是从命令行调用这个PHP脚本?如果它来自浏览器,我的猜测是PHP用户(您的web服务器运行的用户)与启动屏幕的用户不同。 – 2012-03-23 14:10:41

+0

是调用浏览器,但 服务器属于我 只能在一个屏幕 如果我登录ssh和运行此命令 ||| screen -S screen444 -X -p0 eval'stuff“restart”^ m' ||| 成功工作。 但执行浏览器时 不工作(找不到屏幕会话) – user1288273 2012-03-23 14:23:53

回答

0

这不会帮助,如果你的* nix,但如果Apache是​​运行作为Windows服务,您可以通过运行services.msc更改登录。在属性中的登录选项卡上,将登录更改为:“此帐户”,并根据需要填写其余部分。

我这样做是为了让PHP可以使用我开始的会话。不过,我只能以screen -ls查看会话。我不能-X stuff他们出于某种原因,没有错误和没有输出。我的类似问题:cygwin screen session problems through php

+0

我想出了如何填充..请参阅我的问题以获取详细信息 – baberlicious 2012-03-30 21:15:56

0

我想我可能遇到了同样的问题。

当我在shell中运行screen -ls时,它会在/run/screens/S-root中查找。

当我在PHP中使用bash中的screen -ls时,它看起来在/run/screens/S-http

$USER在这两种情况下都是root - 但也许PHP在它添加自己的沙箱时根本不会更新环境变量。

如果您在.screenrc设置multiuser onacladd httpscreen -ls仍然会失败,因为它没有权限在/run/screens/S-root看。

取而代之,您应该设置multiuser onacladd root,并将该屏幕作为属于http的进程启动。我的发车线,例如是:

su - $username -c "screen -A -m -d -h 100 -c /tau/sys/commands/-config/matservirc -S matservi ssh [email protected]$2"

其中$usernamehttp$2是一个IP地址。

您可以发送命令来这样的:

su - $username -c "screen -S matservi -p 0 -X stuff \"cat > ~/server/matlink/access/matinput(换行符)\""

并将其连接到root(或任何其他您正在使用的帐户)是这样的:

screen -r http/matservi

相关问题