通过CRON在共享主机上运行Laravel Horizon



我正在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可用的目录中运行此脚本。

相关内容

  • 没有找到相关文章

最新更新