مكوّن المهام المجدولة crontab
الوصف
workerman/crontab شبيه بـ crontab في Linux، والفرق أنه يدعم الجدولة حتى مستوى الثانية.
تنسيق الوقت:
0 1 2 3 4 5
| | | | | |
| | | | | +------ day of week (0 - 6) (Sunday=0)
| | | | +------ month (1 - 12)
| | | +-------- day of month (1 - 31)
| | +---------- hour (0 - 23)
| +------------ min (0 - 59)
+-------------- sec (0-59)[اختياري؛ إذا غاب، أدنى وحدة وقت هي الدقيقة]
رابط المشروع
https://github.com/walkor/crontab
التثبيت
composer require workerman/crontab
الاستخدام
الخطوة 1: إنشاء ملف العملية 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";
});
}
}
الخطوة 2: إعداد العملية للتشغيل مع webman
افتح ملف الإعداد config/process.php وأضف التالي:
return [
....إعدادات أخرى محذوفة....
'task' => [
'handler' => app\process\Task::class
],
];
الخطوة 3: إعادة تشغيل 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 راجع العمليات المخصصة.