crontab 스케줄 컴포넌트
설명
workerman/crontab은 Linux crontab과 유사하지만, 초 단위 스케줄을 지원합니다.
시간 형식:
0 1 2 3 4 5
| | | | | |
| | | | | +------ day of week (0 - 6) (Sunday=0)
| | | | +------ month (1 - 12)
| | | +-------- day of month (1 - 31)
| | +---------- hour (0 - 23)
| +------------ min (0 - 59)
+-------------- sec (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()
{
// 매 초 실행
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";
});
// 매 분 실행
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' => app\process\Task::class
],
];
3단계: webman 재시작
참고: 스케줄 작업은 즉시 실행되지 않으며, 다음 분부터 카운트하여 실행됩니다.
참고
crontab은 비동기가 아닙니다. 예: 한 task 프로세스에 A, B 두 타이머를 설정하고 둘 다 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 자세한 내용은 커스텀 프로세스를 참조하세요.