Laravelでバッチをcronを設定して動かしたいです。
バッチは2つあり、1つは毎分動かしもう一つは平日の午前9時に一回動かしたいです。
Kernel.php
<?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ Commands\backlognotice::class, Commands\backlognoticetimelimit::class, ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { // $schedule->command('inspire') // ->hourly(); $schedule->command('command:backlognotice')->everyMinute(); $schedule->command('command:backlognoticetimelimit')->weekdays('9:00'); } /** * Register the commands for the application. * * @return void */ protected function commands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }
cronの設定は
* * * * * cd /自分のプロジェクトへの絶対パス && php artisan schedule:run >> /dev/null 2>&1
を設定しています。
現状どちらも毎分行われてしまいます。
やったこと
複数ある場合は【php artisan schedule:work】という記事も見かけたのでやってみたのですが
上手く行きませんでした。
ご教授頂けないでしょうか?
OS 上で crond はサービスとして動いているんですか?
申し訳ございません。
仰っている意味が理解出来ていないのですが、
Amazon Linux 2(サーバ)でcronを設定して、
バッチは動いています。だだ平日の午前9時に一回動かしたいものが
毎分動いてしまっている状況です。
* * * * * cd
こうしているんだから、毎分動きますよ。
cron 自体は毎分動かすけど、 laravel でフィルタリングされるのでそれで正解ですけど。
backlognotice これは毎分実行される
backlognoticetimelimit は平日の9:00 に実行される
それでも毎分動くのであれば、backlognoticetimelimit が失敗、正常実行できなくて再実行されているのではないか、またはサーバーのカレンダーの狂いがないか調査
仰っるとおり、cron 自体は毎分動かして
$schedule->command('command:backlognoticetimelimit')->weekdays('9:00');
で制御している認識です。
backlognotice これは毎分実行される
backlognoticetimelimit は平日の9:00 に実行される
それでも毎分動くのであれば、backlognoticetimelimit が失敗、正常実行できなくて再実行されているのではないか、またはサーバーのカレンダーの狂いがないか調査
backlognoticetimelimitはcronを追加して出来ました。
いろいろとご教授ありがとうございました。
回答1件