crontab定時タスクコンポーネント
workerman/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: プロセスファイル process/Task.php
の作成
<?php
namespace 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";
});
// 1分の最初の秒に実行
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' => process\Task::class
],
];
ステップ3: webmanの再起動
注意:タイミングタスクはすぐに実行されるわけではありません。すべてのタイミングタスクは次の分に実行されるように計画されています。
説明
crontabは非同期ではありません。たとえば、1つのtaskプロセスにAとBの2つのタイマーを設定し、両方とも1秒ごとにタスクを実行する場合、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
の詳細な設定については、カスタムプロセスを参照してください。