CakePHP3で作成したシェルをcron設定する(バッチ処理)

シェアする

今回はCakePHPで作成したシェルをcronに設定することでバッチ処理を実現する方法を紹介します(CakePHP v.3.4.4)。

話のメインはcronの設定です。
シェルの作成方法はこちらの記事で紹介しています。

CakePHP3でシェルを作成し、コンソールから実行する手順を説明いたします。シェルを作ることができれば、cronジョブを使用してバッチ処理を実現するなど、ウェブブラウザからのアクセスを必要としない処理に使うことができます。
スポンサーリンク

シェルの準備

テスト用のシェルを作成し、src/Shell/に格納します。
【HelloLogShell.php】

namespace App\Shell;

use Cake\Console\Shell;
use Cake\Log\Log;

class HelloLogShell extends Shell
{
    public function main()
    {
        LOG::info('Hello World','hello');
    }
}

今回のシェルは、ファイル「logs/hello.log」に「Hello World」のログを残す処理です。

指定のログファイルにログを残す為には他にも設定が必要ですが、今回のお話のメインとはずれますので、そちらの説明は割愛しますが、参考にしたサイトを紹介します。

CakePHPでは、debug.logとerror.logが用意されておりレベルに合わせて出力する事ができる。しかし場合によってはユーザ特定の処理に関するログを別ログファイルにまとめて出力したい場合があるのでその方法を記す。 別ファイルにログ出力するにはscopeを設定するだけでよい。 ただしそれだけだと同じログがde...

crontabコマンド

以下のコマンドで、cronを設定するエディタを起動します。

crontab -e

crontabの書式

crontabuは以下の書式になります。

分 時 日 月 曜日 コマンド
分 0~59、ワイルドカード(\*)を指定すると毎分。
時 0~23、ワイルドカード(\*)を指定すると毎時。
日 1~31、ワイルドカード(\*)を指定すると毎日。
月 1~12、ワイルドカード(\*)を指定すると毎月。
曜日 0~7、ワイルドカード(\*)を指定すると毎日。

複数パターンの設定の仕方は以下

リスト 「時」に「1,5,10」を設定すると、1時、5時、10時に実行
範囲  「時」に「10-15」を設定すると10時、11時、12時、13時、14時、15時に実行
間隔  「時」に「\*/2」を設定すると2時間おきに実行

上記の書式を踏まえて、cronの設定を記述してみます。

作成した「HelloLogShell」を1分毎に実行する設定を以下に書きます。

PATH=/Applications/MAMP/htdocs/sample/my_app_name/bin:
*/1 * * * * cake hellolog

1行目の「PATH=」で、コマンドまでのパスを設定できます。
2行目からコマンドの登録になります。
「cake hellolog」が実行コマンドになりますが、パスを設定しておかないとフルパスで書かなければなりませんので、複数のバッチ処理を組みたい場合はパスの設定をした方が良いと思います。パスを複数設定する場合は、パスを「:」コロンで区切ればOKです。
2つ目のコマンドを登録したい場合は、改行して3行目に同じように追加します。
「分」を「*/1」に設定し、他全て「*」となっているので毎分実行されるようになります。

あとは何もせずに待ってみましょう。

バッチ処理の確認

1分毎に、ログがしっかり残せているか「logs/hello.log」の中身を見てみましょう。
【hello.log】


2018-01-26 18:08:01 Info: Hello World
2018-01-26 18:09:00 Info: Hello World
2018-01-26 18:10:01 Info: Hello World
2018-01-26 18:11:00 Info: Hello World
2018-01-26 18:12:01 Info: Hello World
2018-01-26 18:13:00 Info: Hello World

ちゃんと設定通りにコマンドが通っておりますね。

まとめ

シェルをコンソールから実行して処理の確認が取れたならば、あとはcronにコマンドと時間を指定することで、バッチ処理を実現することができます。

飲食業界からIT業界に転身してきて現在2年目です。PHPの経験がメインとなります。これまで自分がPHPを扱ってきた上で、モヤモヤしてきたことをメインに記事にしていきますのでよろしくお願いいたします。

スポンサーリンク

シェアする

フォローする