workerman/crontab
설명
workerman/crontab는 workerman 기반의 정기 작업 프로그램으로, 리눅스의 crontab과 유사합니다. workerman/crontab는 초 단위 정기 작업을 지원합니다.
workerman/crontab를 사용하려면 먼저 PHP의 타임존을 설정해야 하며, 그렇지 않으면 실행 결과가 예상과 일치하지 않을 수 있습니다.
시간 설명
0 1 2 3 4 5
| | | | | |
| | | | | +------ 주의 요일 (0 - 6) (Sunday=0)
| | | | +------ 월 (1 - 12)
| | | +-------- 일 (1 - 31)
| | +---------- 시간 (0 - 23)
| +------------ 분 (0 - 59)
+-------------- 초 (0-59)[생략 가능, 0자리가 없으면 최소 시간 단위는 분]
설치
composer require workerman/crontab
예시
<?php
use Workerman\Worker;
require __DIR__ . '/vendor/autoload.php';
use Workerman\Crontab\Crontab;
$worker = new Worker();
// 타임존 설정, 예상 결과와의 일치를 피하기 위해
date_default_timezone_set('PRC');
$worker->onWorkerStart = function () {
// 매 분의 첫 번째 초에 실행.
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";
});
};
Worker::runAll();
주의
정기 작업은 즉시 실행되지 않으며, 모든 정기 작업은 다음 분에 들어와서 카운트가 시작됩니다.
workerman 타이머와 마찬가지로 작업은 모두 현재 프로세스에서 실행됩니다.
swoole/swow 코루틴을 사용하지 않은 경우, 작업이 완료되지 않으면 다음 실행 주기로 넘어갈 때 현재 작업이 완료될 때까지 기다리며, 새로운 작업 실행은 지연됩니다.
swoole/swow 코루틴이 활성화된 경우, 이전 작업이 완료되지 않더라도 다음 작업은 즉시 실행될 수 있으며, 대기열에 들어가지 않습니다.
인터페이스
Crontab::destroy()
타이머 파괴
$crontab = new Crontab('1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
$crontab->destroy();