Laravel 5 每 30 秒安排一次作业
Posted
技术标签:
【中文标题】Laravel 5 每 30 秒安排一次作业【英文标题】:Laravel 5 schedule job every 30 seconds 【发布时间】: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 秒运行一次呢?
【问题讨论】:
Running a Laravel method every 30 seconds的可能重复 【参考方案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 秒执行一次?以上是关于Laravel 5 每 30 秒安排一次作业的主要内容,如果未能解决你的问题,请参考以下文章
使用 Node-Cron 每 10 秒执行一次 Cron 作业