6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

cronはもはや不要!?lavary/crunzを使って、PHPでタスク管理してみた。

Last updated at Posted at 2019-10-27

lavary/crunzを使って、PHPでタスク管理してみた。

できること

タスク管理は、crontabやcron.dでシェルやファイル毎に時間の指定をすることが多いと思うが、その管理をPHPで制御できるようにする。

メリット

PHPファイルの中でタスク管理が可能
デプロイ時が楽

デメリット

日本語の文献が少ない
大元のphpファイルだけはcronの設定が必要

準備

①ライブラリをcomposerでインストール

インストールしたいアプリケーションディレクトリ上で以下のコマンド。
composerがインストールされていなければ入れる必要がある。

composer require lavary/crunz

成功すると、vendor/binフォルダの中に「crunz」ファイルが作成されます。

※CakePHP3での動作は確認済み

②大元のタスク管理ファイルをphpで作成

ディレクトリの場所は問わないが、ファイル名を必ず「〇〇Tasks.php」とすること

例:
・DefaultTasks.php
・TestTasks.php
・SimpleTasks.php
など。

③大元のタスク管理ファイルの中でlavary/crunzを呼び出す。

use Crunz\Schedule;

④大元のタスク管理ファイルの中にタスクを書く。

<?php

use Crunz\Schedule;

$schedule = new Schedule();
$task = $schedule->run('mv /var/www/html/test.php /var/log/test.php');
$task->daily();

return $schedule;

以上のサンプルは、1日毎にtest.phpを移動させるスクリプトになります。

$schedule->run('')

()内に、linuxのコマンドをそのまま書くことができます。

$task->daily();

以上は1日毎に実行という意味です。

実行のパターン

①毎日10時に実行
$task->dailyAt('10:00');
②毎分実行
$task->everyMinute();
③毎週月曜日の5時に実行
$task->mondays()->at('5:00');
④毎分10分毎に実行
$task->everyTenMinute();

⑤月の初めの9時に実行

$task->monthly()->at('9:00')

※もっとパターンがあります。詳しくはgithubを参照ください。
https://github.com/lavary/crunz

複数タスクも勿論可能

<?php

use Crunz\Schedule;

$schedule = new Schedule();
$task = $schedule->run('mv /var/www/html/test.php /var/log/test.php');
$task->daily();

$task = $schedule->run('cp test.php{,.20191010}');
$task->mondays()->at('19:00');

//CakePHP3のシェルも、もちろん可能!!
$task = $schedule->run('bin/cake TestShell');
$task->everyMinute();

return $schedule;

⑤大元のタスク管理ファイルをcronに置く

タイトルにcronはもはや不要!?と書いたのですが、実際は結局必要なのです。
大元のタスク管理ファイルを、cronで毎分(毎秒)実行させることによって、
phpで設定した実行コマンドをタスクとしてそれぞれ実行するのです。

linux CentOS7で動作確認してます。

cron.dに移動

cd /etc/cron.d/

cron.d内にsampleタスクを作成

vi sample

毎分に実行するタスクを書く(実行者はサンプルではroot)

* * * * * root vendor/bin/crunz schedule:run

schedule:runを呼び出すことによって、
先に作ったDefaultTasks.phpを呼ぶ形になるのです。

これでタスクは設定どおりに呼び出されます。

おまけ

タスク管理ファイルはphpなので勿論、以下のような使い方も可能です。

<?php

use Crunz\Schedule;

$environment = 'local'; // or production
$date = date("YmdHis");
$schedule = new Schedule();

//ファイル名をPHPで生成
$task = $schedule->run('mv /var/www/html/test.php /var/log/'.$date.'.php');
$task->daily();

//if文の利用
if($environment == 'local'){
   $task = $schedule->run('mv /var/www/html/test.php /var/log/test.php');
   $task->daily();
}

return $schedule;

等々

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?