我在使用envoyer部署项目时遇到问题,该执行器执行我创建的工匠命令。
该命令获取我的所有用户,执行另一个工匠命令($this->call('command')
)并通过遍历所有用户来执行操作。
问题在于:
foreach($usernames as $username) {
shell_exec('php ' . base_path('artisan') . ' command ' . $username . ' > /dev/null 2>/dev/null &');
}
此命令在后台启动脚本。 它在没有任何问题的情况下手动执行,并且不会在超时时间内结束(执行大约需要1s),但在envoyer中它不会在部署步骤中停止运行并在超时时失败,尽管它执行完美无瑕。
其他信息:
为什么我在后台运行脚本:
脚本即时开始打开一个套接字,他将全天候收听,直到
用户手动取消它。
答案 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
个实例正在运行。所以你的代码似乎很好(你展示的部分)。
我能想到的唯一事情是:
希望有所帮助,如果您需要更多帮助,请提供更多信息。