Laravel製のCMSである、October CMSでバッチの作成とスケジュール登録まで実装しました。
環境
- Laravel:5.5
- October CMS:1.0
やったこと
今後管理がしやすいように、複数のバッチ処理を一つのプラグインとしてまとめてみました。
フォルダ構造
今回は複数のバッチを一つのプラグインとして管理する形にしたので、以下のような構造でプラグインを用意しました。
1 2 3 4 5 6 7 8 |
plugins/ casareal/ <=== 作者名 cron/ <=== プラグイン名 console/ <=== コンソールコマンド管理用フォルダ Batch_1.php <=== バッチ処理が書かれたファイル Batch_2.php Batch_3.php Plugin.php <=== プラグイン必須ファイル |
バッチファイルの作成
バッチファイルの中身は以下。説明のために、簡単な「Hello world!」を出力するだけのバッチにしました。
今回は引数は特に使いませんでしたので、設定しませんでした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<?php namespace Casareal\Cron\Console; use Illuminate\Console\Command; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; class Batch_1 extends Command { /** * @var string バッチ名 */ protected $name = 'cron:batch_1'; /** * @var string バッチの説明 */ protected $description = '「Hello world!」を出力するバッチ'; /** * 実行したいバッチ処理 * @return void */ public function handle() { $this->output->writeln('Hello world!'); } /** * 引数の定義 * @return array */ protected function getArguments() { return []; } /** * 引数のオプションの定義 * @return array */ protected function getOptions() { return []; } } |
Plugin.php
Plugin.phpは以下のようにしました。
Batch_1.php は毎日(午前0時)、Batch_2.php は1時間ごと、Batch_3.phpは毎日13時に発火するように設定しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<?php namespace Casareal\Cron; use System\Classes\PluginBase; class Plugin extends PluginBase { // プラグイン情報 public function pluginDetails() { return [ 'name' => 'バッチ管理プラグイン', 'description' => 'バッチすべてのスケジュールを管理するプラグイン', 'author' => 'casareal', 'icon' => '', 'homepage' => '' ]; } // ここで使用するコマンドを定義する public function register() { $this->registerConsoleCommand('cron.batch_1', 'Casareal\Cron\Console\Batch_1'); $this->registerConsoleCommand('cron.batch_2', 'Casareal\Cron\Console\Batch_2'); $this->registerConsoleCommand('cron.batch_3', 'Casareal\Cron\Console\Batch_3'); } ... //スケジュール登録 //ここでそれぞれのバッチをスケジュールに登録する public function registerSchedule($schedule) { $schedule->command('cron:batch_1')->daily(); $schedule->command('cron:batch_2')->hourly(); $schedule->command('cron:batch_3')->dailyAt('13:00'); } } |
発火頻度は自由に設定が可能ですが、種類が多いのでここでの紹介は割愛します。
サーバーでcrontabの設定
最後に以下をcrontabで設定したらバッチスケジュールの設定は完了です。
1 |
* * * * * cd /プロジェクトパス && php artisan schedule:run >> /dev/null 2>&1 |
まとめ
以上がOctober CMSでバッチの作成と登録までの流れでした。
今回は複数のバッチの管理がしやすいようにするため、各バッチごとにコマンドを作り、一つのバッチ専用プラグインとして実装しました。
ただ、実行したいバッチ処理が1つしかないのであれば、独立したバッチ専用プラグインを作ったり、バッチごとにコマンドを作成したりしなくても、既存プラグインにあるPlugin.phpのregisterScheduleに処理を直接書いてしまっても問題はないかと思います。