我正在Laravel 8上运行一个应用程序构建。此应用程序处理大量作业。这就是为什么我的队列存储在Redis中并由Laravel Horizon处理的原因。
由于我使用共享主机,我无法访问Supervisord(或任何流程经理(。
我之所以询问社区,是因为我找不到任何关于我的案例首选配置的建议或建议。
CRON-
* * * * * php artisan schedule:run >/dev/null 2>&1
控制台/Kernel.php
$schedule->command('horizon')->everyMinute()->withoutOverlapping();
通过CRON保持Horizon活力的首选方法是什么?
防止Horizon重复进程(以及防止内存泄漏(的首选方法是什么?
由于可以运行cron作业,因此可以创建一个文件"start_horizon.php":
<?php declare(strict_types=1);
$res = shell_exec("php artisan horizon:status");
if($res !== "Horizon is running.n") {
echo "horizon is not running, starting itn";
$fp = popen("php artisan horizon", "r");
while (!feof($fp)) {
$buffer = fgets($fp, 4096);
echo $buffer;
}
echo "horizon was terminatedn";
pclose($fp);
} else {
echo "horizon is runningn";
}
并每隔一分钟左右从cron调用它。这个脚本将检查horizon是否正在运行。如果地平线运行,它将退出。若地平线并没有运行,它将启动地平线。
cron行应该是这样的:
* * * * * cd /your/laravel/dir/ && php start_horizon.php >> /dev/null
需要在artisan
可用的目录中运行此脚本。