crontab zamanlayıcı bileşeni

Açıklama

workerman/crontab, Linux'taki crontab'a benzer, fakat workerman/crontab saniye seviyesinde zamanlamayı destekler.

Zaman açıklaması:

0   1   2   3   4   5
|   |   |   |   |   |
|   |   |   |   |   +------ haftanın günü (0 - 6) (Pazar=0)
|   |   |   |   +------ ay (1 - 12)
|   |   |   +-------- ayın günü (1 - 31)
|   |   +---------- saat (0 - 23)
|   +------------ dakika (0 - 59)
+-------------- saniye (0-59)[atlayabilir, eğer 0'lık yoksa, en küçük zaman dilimi dakikadır]

Proje Adresi

https://github.com/walkor/crontab

Kurulum

composer require workerman/crontab

Kullanım

Adım 1: Yeni bir proses dosyası oluşturun app/process/Task.php

<?php
namespace app\process;

use Workerman\Crontab\Crontab;

class Task
{
    public function onWorkerStart()
    {

        // Her saniye bir kez çalıştır
        new Crontab('*/1 * * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Her 5 saniye bir kez çalıştır
        new Crontab('*/5 * * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Her dakika bir kez çalıştır
        new Crontab('0 */1 * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Her 5 dakika bir kez çalıştır
        new Crontab('0 */5 * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Her dakikanın ilk saniyesinde çalıştır
        new Crontab('1 * * * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

        // Her gün saat 7:50'de çalıştır, burada saniye kısmı atlanmıştır
        new Crontab('50 7 * * *', function(){
            echo date('Y-m-d H:i:s')."\n";
        });

    }
}

Adım 2: Proses dosyasını webman ile başlatmak için yapılandırın

Yapılandırma dosyası config/process.php'yi açın ve aşağıdaki yapılandırmayı ekleyin

return [
    ....Diğer yapılandırmalar, burada atlanmıştır....

    'task'  => [
        'handler'  => app\process\Task::class
    ],
];

Adım 3: webman'ı yeniden başlatın

Not: Zamanlayıcı görevleri hemen çalışmayacak, tüm zamanlayıcı görevleri bir sonraki dakikadan itibaren saymaya başlayacaktır.

Açıklama

crontab asenkron değildir, örneğin bir task işleminde A ve B adlı iki zamanlayıcı ayarlandığında, her ikisi de her saniye bir görev çalıştırıyorsa fakat A görevi 10 saniye sürüyorsa, B, A'nın tamamlanmasını beklemek zorunda kalacak, bu da B'nin yürütülmesinde gecikmelere neden olacaktır. Eğer iş için zaman aralıkları çok hassassa, hassas zamanlayıcı görevlerini ayrı bir proses içinde çalıştırmak gerekir, diğer zamanlayıcı görevlerden etkilenmemesi için. Örneğin config/process.php'de aşağıdaki yapılandırmayı yapabilirsiniz

return [
    ....Diğer yapılandırmalar, burada atlanmıştır....

    'task1'  => [
        'handler'  => process\Task1::class
    ],
    'task2'  => [
        'handler'  => process\Task2::class
    ],
];

Zaman duyarlı zamanlayıcı görevlerini process/Task1.php dosyasına yerleştirin, diğer zamanlayıcı görevleri process/Task2.php dosyasına yerleştirin.

Daha fazla config/process.php yapılandırma açıklamaları için lütfen Özel Proses bölümüne bakınız.