1

我正在 Laravel 8 上运行一个应用程序构建。这个应用程序处理大量的工作。这就是为什么我的队列存储在 Redis 中并由 Laravel Horizo​​n 处理。

由于我在共享主机上,我无法访问 Supervisord(或任何进程管理器)。

我问社区是因为我找不到任何关于我的案例的首选配置的建议或建议。

克朗

* * * * * php artisan schedule:run >/dev/null 2>&1

控制台/内核.php

$schedule->command('horizon')->everyMinute()->withoutOverlapping();

通过 CRON 保持 Horizo​​n 活动的首选方法是什么?

防止 Horizo​​n 重复进程(并防止内存泄漏)的首选方法是什么?

4

1 回答 1

2

由于您可以运行 cron 作业,您可以创建一个文件“start_horizo​​n.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 it\n";
    $fp = popen("php artisan horizon", "r");
    while (!feof($fp)) {
        $buffer = fgets($fp, 4096);
        echo $buffer;
    }
    echo "horizon was terminated\n";
    pclose($fp);
} else {
    echo "horizon is running\n";
}

每隔一分钟左右从 cron 调用它。该脚本将检查 Horizo​​n 是否正在运行。如果地平线运行,它将退出。如果 Horizo​​n 没有运行,它将启动 Horizo​​n。

cron 行应如下所示:

* * * * * cd /your/laravel/dir/ && php start_horizon.php >> /dev/null

需要在artisan可用的目录中运行此脚本。

于 2021-06-01T07:36:30.510 回答