مكوّن مهام كروتساب المجدولة

الوصف

workerman/crontab مشابهة لـ linux crontab، ولكن الفرق هو أن workerman/crontab تدعم المهام المجدولة بمستوى الثواني.

شرح الوقت:

0   1   2   3   4   5
|   |   |   |   |   |
|   |   |   |   |   +------ يوم الأسبوع (0 - 6) (الأحد=0)
|   |   |   |   +------ الشهر (1 - 12)
|   |   |   +-------- يوم الشهر (1 - 31)
|   |   +---------- الساعة (0 - 23)
|   +------------ الدقيقة (0 - 59)
+-------------- الثانية (0-59)[يمكن إغفالها، إذا لم تكن هناك قيمة ثانية، فإن أقل وحدة زمنية هي الدقيقة]

عنوان المشروع

https://github.com/walkor/crontab

التثبيت

composer require workerman/crontab

الاستخدام

الخطوة الأولى: إنشاء ملف العملية 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";
        });

        // تنفيذ عند الثانية الأولى من كل دقيقة
        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";
        });

    }
}

الخطوة الثانية: تكوين ملف العملية ليعمل مع بدء ويب مان

افتح ملف التكوين config/process.php، وأضف تكوينًا جديدًا كما يلي:

return [
    ....تكوينات أخرى، هنا تم إغفالها....

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

الخطوة الثالثة: إعادة تشغيل ويب مان

ملاحظة: لن تقوم المهام المجدولة بالتنفيذ على الفور، جميع المهام المجدولة ستبدأ في العد عند الدقيقة التالية.

الوصف

crontab ليست غير متزامنة، على سبيل المثال، إذا كان هناك عملية task تحتوي على عدادين A و B، وكلاهما ينفذ مهمة واحدة في الثانية، ولكن المهمة 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، يرجى الرجوع إلى العمليات المخصصة