السلام عليكم ورحمة الله وبركاته
يوجد عدة أسئلة في المنتدى تسأل عن تنفيذ كود معين دون تدخل من المستخدم أو زيارة الصفحة من خلال المتصفح فتوجد مهمة في أنظمة Linux تسمى بـ cronjob تقوم بجدولة المهام المراد تنفيذها بعد زمن معين أو بشكل دوري ويكون الشكل العام لها كالتالي :
* [0-59] Minute | * [0-23] Hour | | * [1-31] Day | | | * [1-12] Month | | | | * [0-7] Day Of Week | | | | | * * * * * Command line to execute
أول خانة للدقائق والتي تليها للساعات والتي تليها للأيام والتي تليها للشهور والتي تليها لأيام الأسبوع ثم مسار الملف الموجود به الكود المراد تنفيذه .
على سبيل المثال نريد تنفيذ كود الساعة 9.30 يوم 1 يناير من كل عام يكون الود كالتالي :
30 9 1 1 * /path/to/yourFile
أو تنفيذ كود كل 2 دقيقة يكون الكود كالتالي :
*/2 * * * * /path/to/yourFile
- بغيير القيمة 2 يتم تغيير قيمة الدقائق التي سيتم تنفيذ الكود بشكل دوري بعدها
أو تنفيذ كود كل يوم كالتالي:
0 0 * * * /path/to/yourFile
أو تنفيذ الكود كل 3 أيام كالتالي:
0 0 */3 * * /path/to/yourFile
أو تنفيذ كود بساعات محددة في اليوم كالتالي:
0 3,6,18 * * * /path/to/yourFile
أو تنفيذ كود كل شهر كالتالي:
0 0 1 * * /path/to/yourFile
أو تنفيذ كود بشهور معينة كالتالي:
0 0 1,5,11 * * /path/to/yourFile
أو تنفيذ كود كل عام:
0 0 1 1 * /path/to/yourFile
أو تنفيذ كود كل يوم سبت من كل أسبوع كالتالي:
0 0 * * 0 /path/to/yourFile
وهذا كيفما تشاء
يمكن عمل الـ cronjob من خلال الـ cPanel الخاصة بالإسضافة أو إستخدام الكود التالي من خلال لغة PHP لعمل الـ cronjob كالتالي:
<?php
$dir = __DIR__ .'/run.php';
$cronjobs = shell_exec('crontab -l');
$newCronjob = "*/2 * * * * /usr/bin/php -q $dir";
file_put_contents('/tmp/crontab.txt', $cronjobs.$newCronjob.PHP_EOL);
echo exec('crontab /tmp/crontab.txt');
?>- طبعاً المتغير $dir هو مسار الملف المراد تنفيذه .
- وداخل المتغير $newCronjob يمكن تغيير توقيت التنفيذ كما تم شرحه في الأعلى .
كنت أود تنفيذ تطبيق بواجهة مستخدم لعمل الـ cronjob بسهولة من خلال واجهة رسومية دون الحاجة لمعرفة التفاصيل الخاصة بالـ cronjob ولكن لا يسعني الوقت لفعل هذا حالياً , في وقت لاحق بإذن الله تعالى .
ملاحظة :
- يجب أن تكون على نظام Linux ليعمل معك التطبيق أو تنفيذه مباشراً على إستضافة بنظام Linux .