我发送了php的屏幕命令但是
例如
<?php
system("screen -S screen444 -X -p0 eval 'stuff \"restart\"^m'")
?>
我发送此命令
错误:找不到屏幕会话。
但屏幕正在运行
有任何想法吗?
由于
答案 0 :(得分:0)
如果您是* nix,这将无济于事,但如果Apache在Windows上作为服务运行,您可以通过运行services.msc
来更改登录。在属性中,在“登录”选项卡上,将“登录为:”更改为“此帐户”,并根据需要填写其余部分。
我这样做是为了让PHP可以使用我开始的会话。但是我只能screen -ls
才能看到会话。由于某种原因,我不能-X stuff
他们,没有错误,也没有输出。我的类似问题:cygwin screen session problems through php
答案 1 :(得分:0)
我想我可能遇到了同样的问题。
当我从shell中的bash运行screen -ls
时,它会查看/run/screens/S-root
。
当我在PHP中使用bash运行screen -ls
时,它会查找/run/screens/S-http
。
$USER
都是root
- 但是当PHP添加自己的沙盒时,PHP根本不会更新环境变量。
如果您在multiuser on
中设置acladd http
和.screenrc
,screen -ls
仍然会失败,因为它无权查看/run/screens/S-root
。
相反,您应该设置multiuser on
和acladd root
,然后将屏幕作为属于http
的进程启动。例如,我的起点是:
su - $username -c "screen -A -m -d -h 100 -c /tau/sys/commands/-config/matservirc -S matservi ssh matserv@$2"
其中$username
为http
,$2
为IP地址。
您可以像这样发送命令:
su - $username -c "screen -S matservi -p 0 -X stuff \"cat > ~/server/matlink/access/matinput
(换行符)\""
并将其附加到root
(或您正在使用的任何其他帐户),如下所示:
screen -r http/matservi