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();