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
のさらなる設定説明については、カスタムプロセスを参照してください。