微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 CRON

如何解决通过 CRON

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

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

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

CRON

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

控制台/Kernel.PHP

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

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

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

解决方法

由于您可以运行 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 调用它。此脚本将检查地平线是否正在运行。如果地平线正在运行,它将退出。如果地平线未运行,它将启动地平线。

cron 行应如下所示:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。