質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

3036閲覧

本番環境でLaravelのタスクスケジュール(Kernel)が機能しない

saori777

総合スコア6

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/05/31 05:23

起きていること

開発環境ではバッチ処理に対してタスクスケジュールが起動するが、本番環境(conoha VPS)では機能しない。

前提の認識

バッチ処理を実行するために、以下2つのみ行っております。
「そもそもこれやらなきゃ」みたいな抜け漏れがありましたら教えていただけると幸いです。

1.バッチ処理にどのようなことをするか記載する
2.タスクスケジュールにどのバッチ処理をいつ起動するか記載する

該当プログラム

1.バッチ処理

php

1// /sample/app/Console/Commands/LessonFinish.php 2<?php 3 4namespace App\Console\Commands; 5 6use Carbon\Carbon; 7use App\Mail\EvaluationRequest; 8use App\Models\User; 9use App\Models\Lesson; 10use App\Models\Payment; 11use App\Models\Application; 12use App\Models\Evaluation; 13use Illuminate\Console\Command; 14use Illuminate\Support\Facades\DB; 15use Illuminate\Support\Facades\Mail; 16 17class LessonFinish extends Command 18{ 19 /** 20 * The name and signature of the console command. 21 * 22 * @var string 23 */ 24 // コマンドの名前を設定 25 protected $signature = 'lesson:finish'; 26 27 /** 28 * The console command description. 29 * 30 * @var string 31 */ 32 protected $description = 'レッスンの終了時間に合わせて、レッスンを終了させる'; 33 34 /** 35 * Create a new command instance. 36 * 37 * @return void 38 */ 39 public function __construct() 40 { 41 parent::__construct(); 42 } 43 44 /** 45 * Execute the console command. 46 * 47 * @return int 48 */ 49 public function handle() 50 { 51 // ここに処理色々書いてあります 52 } 53}

2.タスクスケジュール処理

php

1// /sample/app/Console/Kernel.php 2 3<?php 4 5namespace App\Console; 6 7use Illuminate\Support\Facades\DB; 8use Illuminate\Console\Scheduling\Schedule; 9use Illuminate\Foundation\Console\Kernel as ConsoleKernel; 10 11class Kernel extends ConsoleKernel 12{ 13 /** 14 * The Artisan commands provided by your application. 15 * 16 * @var array 17 */ 18 protected $commands = [ 19 // レッスンを削除するコマンド 20 \App\Console\Commands\LessonFinish::class, 21 ]; 22 23 /** 24 * Define the application's command schedule. 25 * 26 * @param \Illuminate\Console\Scheduling\Schedule $schedule 27 * @return void 28 */ 29 protected function schedule(Schedule $schedule) 30 { 31 // レッスン削除のバッチ処理 32 $schedule->command('lesson:finish --force') 33 ->withoutOverlapping() // 多重実行を防ぐ 34 // ->everyFiveMinutes(); // 5分ごとに実行 35 ->everyMinute(); // 5分ごとに実行 36 } 37 38 /** 39 * Register the commands for the application. 40 * 41 * @return void 42 */ 43 protected function commands() 44 { 45 $this->load(__DIR__.'/Commands'); 46 require base_path('routes/console.php'); 47 } 48}

## 試したこと
1.タスクスケジュールのcommandを--forceにしてみた
2.タスクスケジュールのcommandを->everyFiveMinutes();から->everyMinute();に変更してみた
3.laravelのエラーログ確認(出力されていなかった)
4.キャッシュクリア

php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear composer dump-autoload php artisan clear-compiled php artisan optimize php artisan config:cache

環境

Laravel Framework 8.44.0
centos8
conoha VPS

お力添えいただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

php artisan command
で登録されているか確認してみてはどうですか

投稿2021/05/31 05:45

date

総合スコア1820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saori777

2021/05/31 06:44

有難うございます。 以下が表示されました。 ``` Command "command" is not defined. Did you mean one of these? lesson:finish make:command ``` また、バッチ処理を直接行う(php artisan lesson:finish)と、問題なくバッチ処理が実行されました。 なので、やはりKernel.phpのタスクスケジュールが機能していないように思います。
date

2021/05/31 07:01

うる覚えなのですが crontabで * * * * * php artisan schedule:run >> /dev/null 2>&1 などが開発環境で設定されていませんでしたか?
saori777

2021/05/31 07:58

有難うございます! Kernel,phpに登録するだけで指定したタイミングで実行されるものだと思っておりました。 crontabの設定をすることで、無事解決しました。 有難うございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問