使用自定义 artisan 命令进行 Envoyer 部署失败

Sla*_*yoo 5 laravel envoyer.io laravel-5.6

我在使用执行我创建的 artisan 命令的 envoyer 部署项目时遇到问题。

该命令获取我的所有用户,执行另一个 artisan 命令 ( $this->call('command')) 并通过迭代所有用户来执行它的操作。

问题就出在这里:

    foreach($usernames as $username) {
        shell_exec('php ' . base_path('artisan') . ' command ' . $username . ' > /dev/null 2>/dev/null &');
    }
Run Code Online (Sandbox Code Playgroud)

此命令在后台启动脚本。它的手动执行没有任何问题,并且不会以超时结束(执行大约需要 1 秒),但在 envoyer 中,它不会在部署步骤中停止运行,并且尽管执行完美,但会在超时时失败。

附加信息:
由于我在后台运行脚本的原因:
我启动的脚本打开一个套接字,他将 24/7 监听该套接字,直到用户手动取消它。

Mag*_*ama 0

我刚刚创建了一个较小的示例以确保一切正常:

文件forever.php将保持无限循环,每 5 秒打印一些内容:

<?php
while (true) {
  echo "I am still in the loop $argv[1]\n";
  sleep(5);
}
Run Code Online (Sandbox Code Playgroud)

文件script.php将调用forever.php父进程的多个实例并与父进程分离(与您所做的相同):

<?php
for ($i = 0; $i < 5; $i++) {
  shell_exec("php forever.php $i > /dev/null 2>/dev/null &");
}
Run Code Online (Sandbox Code Playgroud)

执行时php script.php,显然有5个实例在forever.php运行。所以你的代码看起来不错(你展示的部分)。

对于你的情况,我唯一能想到的是:

  • 1 秒对于脚本在 Envoyer 上运行来说太长了?
  • 您的循环是对所有用户的 foreach 。可能是您在该循环中生成了太多进程吗?您有多少用户?
  • 您能否在执行之前打印您的命令,然后直接在终端上尝试,看看是否一切正常?

希望它对您有所帮助,如果您需要更多帮助,请提供更多信息。