crontab定時タスクコンポーネント

説明

workerman/crontabはLinuxのcrontabに類似していますが、workerman/crontabは秒単位のタイミングをサポートしています。

時間の説明:

0   1   2   3   4   5
|   |   |   |   |   |
|   |   |   |   |   +------ 曜日 (0 - 6) (日曜日=0)
|   |   |   |   +------ 月 (1 - 12)
|   |   |   +-------- 月の日 (1 - 31)
|   |   +---------- 時 (0 - 23)
|   +------------ 分 (0 - 59)
+-------------- 秒 (0-59)[省略可能、0位がない場合、最小時間粒度は分]

プロジェクトアドレス

https://github.com/walkor/crontab

インストール

composer require workerman/crontab

使用方法

ステップ1:プロセスファイル app/process/Task.php を新規作成

<?php
namespace app\process;

use Workerman\Crontab\Crontab;

class Task
{
    public function onWorkerStart()
    {

        // 毎秒1回実行
        new Crontab('*/1 * * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // 5秒ごとに実行
        new Crontab('*/5 * * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // 毎分1回実行
        new Crontab('0 */1 * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // 5分ごとに実行
        new Crontab('0 */5 * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // 毎分の最初の秒で実行
        new Crontab('1 * * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // 毎日7時50分に実行(秒位を省略)
        new Crontab('50 7 * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

    }
}

ステップ2:プロセスファイルをwebman起動時に設定

設定ファイル config/process.php を開き、以下の設定を追加

return [
    ....その他の設定、省略....

    'task'  => [
        'handler'  => app\process\Task::class
    ],
];

ステップ3:webmanを再起動

注意:定時タスクはすぐには実行されず、すべての定時タスクは次の分からカウントダウンを開始します。

注意事項

crontabは非同期ではありません。例えば、あるタスクプロセスの中でAとBという2つのタイマーを設定し、両方とも毎秒タスクを実行するとしますが、Aタスクが10秒かかる場合、BはAが完了するまで待つ必要があるため、Bの実行には遅延が発生します。
ビジネスが時間間隔に非常に敏感な場合は、敏感な定時タスクを別のプロセスで実行する必要があります。他の定時タスクに影響されないようにするためです。例えば、config/process.php に以下のように設定します。

return [
    ....その他の設定、省略....

    'task1'  => [
        'handler'  => process\Task1::class
    ],
    'task2'  => [
        'handler'  => process\Task2::class
    ],
];

時間に敏感な定時タスクを process/Task1.php に配置し、その他の定時タスクを process/Task2.php に配置します。

config/process.phpのさらなる設定説明については、カスタムプロセスを参照してください。