مكون مهمات التخطيط الزمني crontab

workerman/crontab

الوصف

workerman/crontab شبيهة بـ crontab في نظام Linux ولكن الاختلاف الرئيسي أن workerman/crontab تدعم الجدولة بدقة الثواني.

شرح الوقت:

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

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

https://github.com/walkor/crontab

التثبيت

composer require workerman/crontab

الاستخدام

الخطوة الأولى: إنشاء ملف العمليات process/Task.php

<?php
namespace 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";
        });

    }
}

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

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

return [
    ....تكوينات أخرى، يتم حذفها هنا....

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

الخطوة الثالثة: إعادة تشغيل webman

ملاحظة: لن يتم تنفيذ مهام التخطيط الزمني على الفور، فسيتم بدء تنفيذها في الدقيقة التالية

الوصف

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، يرجى الرجوع إلى Custom Process