مكوّن مهام كروتساب المجدولة
الوصف
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
، يرجى الرجوع إلى العمليات المخصصة