workerman/crontab
Giới thiệu
workerman/crontab là một chương trình tác vụ định kỳ dựa trên workerman, tương tự như crontab của linux. workerman/crontab hỗ trợ định thời mức giây.
Việc sử dụng
workerman/crontabcần phải thiết lập đúng múi giờ của php, nếu không, kết quả chạy có thể không như mong đợi.
Giải thích thời gian
0 1 2 3 4 5
| | | | | |
| | | | | +------ ngày trong tuần (0 - 6) (Chủ nhật=0)
| | | | +------ tháng (1 - 12)
| | | +-------- ngày trong tháng (1 - 31)
| | +---------- giờ (0 - 23)
| +------------ phút (0 - 59)
+-------------- giây (0-59)[có thể bỏ qua, nếu không có vị trí 0, thì độ phân giải thời gian nhỏ nhất là phút]
Cài đặt
composer require workerman/crontab
Ví dụ
<?php
use Workerman\Worker;
require __DIR__ . '/vendor/autoload.php';
use Workerman\Crontab\Crontab;
$worker = new Worker();
// Thiết lập múi giờ, tránh kết quả chạy không như mong đợi
date_default_timezone_set('PRC');
$worker->onWorkerStart = function () {
// Thực hiện vào giây thứ 1 mỗi phút.
new Crontab('1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
// Thực hiện vào lúc 7 giờ 50 mỗi ngày, lưu ý rằng phần giây đã bị bỏ qua.
new Crontab('50 7 * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
};
Worker::runAll();
Lưu ý
Các tác vụ định kỳ sẽ không được thực hiện ngay lập tức, tất cả các tác vụ định kỳ sẽ bắt đầu đếm thời gian vào phút tiếp theo.
Giống như bộ định thời workerman, tất cả các nhiệm vụ sẽ được thực hiện trong tiến trình hiện tại.
Nếu không bật hợp tác swoole/swow, nếu một nhiệm vụ chưa hoàn thành đến chu kỳ thực hiện tiếp theo, sẽ chờ cho nhiệm vụ hiện tại hoàn tất, nhiệm vụ mới sẽ bị trì hoãn.
Nếu bật hợp tác swoole/swow, nếu nhiệm vụ trước chưa hoàn thành, nhiệm vụ tiếp theo có thể sẽ được thực hiện ngay lập tức, không chờ đợi.
Giao diện
Crontab::destroy()
Hủy bỏ bộ định thời
$crontab = new Crontab('1 * * * * *', function(){
echo date('Y-m-d H:i:s')."\n";
});
$crontab->destroy();