【问题标题】:How to run multiple commands with Symfony\Component\Process\Process如何使用 Symfony\Component\Process\Process 运行多个命令
【发布时间】:2018-08-25 15:05:20
【问题描述】:

我们使用https://www.cloudfoundry.org/ 托管我们的应用程序。 要连接到服务器,我们必须使用cf ssh APP-NAME 而不是普通的ssh 命令。

现在我想写一个简单的任务运行器,比如https://deployer.org/ 来在服务器上运行一些工匠命令。 为此我厌倦了Symfony\Component\Process\Process,它适用于连接到服务器,但我无法保持连接打开以运行其他一些命令。

有人知道如何保持连接打开并运行一些命令吗?

这是我当前的代码:

use Symfony\Component\Process\Process;

$process = new Process("cf ssh APP-NAME");
$process->setPTY(true);

// Add some other commands like "php artisan migrate" 

$process->run();

echo $process->getOutput();

【问题讨论】:

  • 如果您正在寻找通过流程组件进行的子处理,那么您将陷入痛苦的境地。我认为这可能是可能的,但我建议考虑在没有cf ssh 的情况下使用 SSH。 docs.cloudfoundry.org/devguide/deploy-apps/… Vasyl 对 laravelcollective/remote 的建议是正确的,如果您能弄清楚如何通过纯 SSH 进行连接。如果你不能,而不是一堆子进程,把你想要子进程的所有命令(工匠迁移等......)放在一个任务中:docs.cloudfoundry.org/devguide/using-tasks.html
  • 非常感谢您的回答。我会检查一下,当它与纯 ssh 一起使用时,我可以使用 deployer 来完成我的任务:)

标签: laravel symfony cloud-foundry swisscomdev


【解决方案1】:

在远程服务器上执行命令与启动子进程完全不同。所以它不属于 Process 组件,而是属于另一个库。 尝试使用这个phpseclib/phpseclib 在这里你可以找到很好的手册phpseclib/phpseclib manual

或者这个ssh-client/ssh-client

另外,看看这个 laravel 包laravelcollective/remote

【讨论】:

    猜你喜欢
    • 2012-10-30
    • 2011-06-24
    • 2021-12-10
    • 1970-01-01
    • 2023-03-09
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多