【问题标题】:php ssh linux screen execphp ssh linux屏幕执行
【发布时间】:2018-05-24 08:42:24
【问题描述】:

我正在尝试在 Linux 中使用 PHP 发布一行 cmets。 我做的第一步是创建一个新屏幕;

exec('screen -dmS stresstest.session');

这没有任何问题。 在此之后,我想输出例如 IP 地址;

exec('screen -S stresstest.session -X stuff "ip addre $(echo -ne \'\\r\')"');

这就是问题所在; 不知何故,不可能在第一行代码之后评论第二行代码。

如果我用我的 root 用户制作 Linux 屏幕,然后使用 php 执行几次“ip addre”,它就像一个魅力。 当我用php创建屏幕并尝试第二行代码时,它不起作用。

这会是什么问题? 我认为这与权限有关吗?

没有错误。 看起来脚本运行正常,但是 php 没有执行第二个和第三个命令。

感谢您的意见。

【问题讨论】:

  • 您能否提供在尝试运行第二个exec 时收到的任何错误消息?
  • 加载 PHP 脚本时没有错误。做了新的画面,但是没有执行第二步和第三步。没有输出错误,只有一个 string(0) 消息。

标签: php linux ssh


【解决方案1】:

屏幕窗口编号从 0 开始。请尝试改用 -p 0

另外,-X 参数向screen 进程本身发送命令,而不是发送到screen 控制的缓冲区中。

如果您在两个终端中运行这些命令:

  1. 1号航站楼:screen -dmS test
  2. 2 号航站楼:screen -x test(这将附加到您的新 test 屏幕)
  3. 1号航站楼:screen -S test -X echo message

您会在屏幕消息缓冲区中看到“消息”(通常在控制台的最后一行出现^A w 等的输出)。

我看不到调用命令或将内容直接插入正在运行的屏幕缓冲区的方法。

我能想到的最接近的方法是确定哪个 PTY 与您正在运行的屏幕会话相关联,并直接回显某些内容。不知道你如何以编程方式确定哪个是正确的:-)

内屏:

$ tty
/dev/ttys002

外屏:

$ echo message >/dev/ttys002

我认为这可能与您的预期相差甚远!你到底想达到什么目的?

【讨论】:

  • 我也在谷歌上找到了这个解决方案。我试过了,但没有用。
  • 也许您可以详细说明“它不起作用”?可能会给我们关于问题的提示。
  • 我尝试了以下方法; screen -S stresstest.session -X stuff "ip addre $(echo -ne \'\\r\'),没用,也试过 screen -S stresstest.session -p 0 -X stuff "ip addre $( echo -ne \'\\r\').
  • 你期望它做什么?它做了什么?有没有错误?
  • 这个想法是制作一个屏幕,并在屏幕制作完成后插入一个新的注释,例如 ip addre。根本没有错误输出。脚本似乎成功了,但是第二步和第三步没有执行。
【解决方案2】:

我正在为 PHP 中的星号构建压力测试设备。 意思是创建一个循环并在每个新屏幕上调用一个电话号码。 这样我想测试 Asterisk 能走多远。

我解决了这个问题。 我错了,这与权限无关。

我只需要选择第一个屏幕。

-p 0

这个是为我做的。

RUN_PJSUA       =    'screen -S stresstest.session -p 0 -X stuff "ip addre $(echo -ne \'\\r\')"';

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多