带有Laravel的PHP无限脚本

带有Laravel的PHP无限脚本,php,laravel,Php,Laravel,我有一个表用户,我需要不断上传,所以一旦更新,我想直接重新启动命令 事实上,我正在使用一个cron,它每分钟通过Laravel($schedule->command('update:users')->everyMinute();)启动一次,但是如果作业的速度超过一分钟,我就会损失一些时间,如果超过一分钟,我的服务器就会过载 我在考虑使用一个队列,一旦脚本终止,重新设置它自己,如下所示: // Do My stuff Queue::push(new UpdateUsers($)); 但是如果脚本

我有一个表用户,我需要不断上传,所以一旦更新,我想直接重新启动命令

事实上,我正在使用一个cron,它每分钟通过Laravel(
$schedule->command('update:users')->everyMinute();
)启动一次,但是如果作业的速度超过一分钟,我就会损失一些时间,如果超过一分钟,我的服务器就会过载

我在考虑使用一个队列,一旦脚本终止,重新设置它自己,如下所示:

// Do My stuff
Queue::push(new UpdateUsers($));

但是如果脚本崩溃,它将不会重新加载自己,我需要至少启动一次。我知道我可以使用pcntl_fork函数,但我希望使用Laravel的交钥匙函数。我应该怎么做?

我建议在Cli上运行一个命令, 在指挥处

while (true)
循环,使其永远运行。创建此脚本后,可以使用

这个服务运行您告诉他的命令,当它失败时,它将自动重新启动它。请注意,在X失败后,它将停止,这取决于您如何配置它

中的conf文件示例:

/etc/supervisord/conf.d/my_infinite_script.conf
内容可以是:

[program:laravel_queue]
command=php artisan your_command:here
directory=/path/to/laravel
autostart=true
autorestart=true
stderr_logfile=/var/log/your_command.err.log
stdout_logfile=/var/log/your_command.out.log

在某些情况下,我使用了Tzook Bar Noy建议的方法,但也使用了一种稍微丑陋的方法,如果这可能导致问题,可以避免脚本永远循环的问题。这可以在cronjob中每分钟调用一次:

$runForSeconds = 55;
$runMinute = date('i');
do {
    ....code....
} while (date('i') == $runMinute && intval(date('s')) < $runForSeconds);

你不能把整个命令放在
while(true){}
循环中运行一次吗?注意:你可以在不重叠的情况下使用
来防止服务器过载()
-它将确保在同一时间运行的脚本不会超过一个副本。
command=php artisan queue:listen