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

时间:2018-04-15 13:56:55

标签: laravel laravel-5.6 envoyer.io

我在使用envoyer部署项目时遇到问题,该执行器执行我创建的工匠命令。

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

问题在于:

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

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

其他信息:
为什么我在后台运行脚本:
脚本即时开始打开一个套接字,他将全天候收听,直到 用户手动取消它。

1 个答案:

答案 0 :(得分:0)

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

文件forever.php将每隔5秒保持无限循环打印一次:

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

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

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

执行php script.php时,显然有5个forever.php个实例正在运行。所以你的代码似乎很好(你展示的部分)。

我能想到的唯一事情是:

  • 1秒太长了,脚本无法在Envoyer上运行?
  • 您的循环是所有用户的预告。难道你在那个循环中生成了太多进程吗?你有多少用户?
  • 你可以在执行之前打印你的命令,直接在终端上试一下,看它是否一切正常?

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