【问题标题】:Laravel 5 schedule job every 30 secondsLaravel 5 每 30 秒安排一次作业
【发布时间】:2016-08-14 21:30:42
【问题描述】:

我正在使用 Laravel 计划来运行 cron 作业。

在我的 crontab 中,我添加了(带有正确的项目路径):

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

现在我的 App\Console\Kernel.php 看起来像:

protected function schedule(Schedule $schedule)
{
        $schedule->command('investments:calculate_interests')->everyMinute();
        $schedule->call('\App\Http\Controllers\UsersController@testEvent')->everyMinute();
}

这样使用它,我每分钟都能成功运行作业。但是我如何将其更改为每 10 或 20 或 30 秒运行一次呢?

【问题讨论】:

标签: laravel laravel-5 scheduled-tasks laravel-5.2 laravel-scheduler


【解决方案1】:

我用这段代码解决了这个问题:

public function handle()
{
    $count = 0;
    while ($count < 59) {
        $startTime =  Carbon::now();

        $this->travelsRequestsDriversRepository->beFreeRequestAfterTime();

        $endTime = Carbon::now();
        $totalDuration = $endTime->diffInSeconds($startTime);
        if($totalDuration > 0) {
            $count +=  $totalDuration;
        }
        else {
            $count++;
        }
        sleep(1);
    }


}

并在 cron 表中添加这个命令。

* * * * * /usr/local/php56/bin/php56 /home/hamshahr/domains/hamshahrapp.com/project/artisan taxis:beFreeTaxis 1>> /dev/null 2>&1

【讨论】:

    【解决方案2】:

    它不像 Alexey Mezenin 建议的那样工作,但他告诉我在哪里测试一些解决方案。

    您可以添加带有计时器的循环而不是

    protected function schedule(Schedule $schedule)
    

    但直接进入命令/事件或其他您想要循环的内容。

    比如我在运行一个命令,所以在命令里面我加了:

    public function handle()
    {
            \App\Investment::calculate();
            sleep(30);
            \App\Investment::calculate();
    }
    

    现在我的命令每 30 秒运行一次。

    【讨论】:

    • 这个方法会阻止其他命令被执行。我怎样才能不阻止其他命令,但仍然每 30 秒执行一次?
    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 2011-03-20
    • 1970-01-01
    • 2021-06-17
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    相关资源
    最近更新 更多