كلاود
أدلة

Cron Jobs: جدولة المهام التلقائية على السيرفر

كلاود|١٦ يناير ٢٠٢٦|4 دقائق قراءة|٥٣٣ مشاهدة
Cron Jobs: جدولة المهام التلقائية على السيرفر

نسخ احتياطي الساعة 3 فجراً، تقارير يومية، تنظيف الملفات المؤقتة — Cron يأتمت كل شي. نشرح بأمثلة عملية.

ما هي مهام Cron؟

Cron هو مُجدول المهام في أنظمة Linux. يتيح لك تشغيل أوامر أو سكربتات تلقائياً في أوقات محددة — كل دقيقة، كل ساعة، كل يوم، أو أي جدول زمني تريده. بدون Cron ستحتاج تسجيل الدخول يدوياً لتنفيذ المهام المتكررة.

استخدامات شائعة:

  • النسخ الاحتياطي اليومي لقواعد البيانات
  • حذف الملفات المؤقتة والسجلات القديمة
  • إرسال التقارير الدورية
  • تجديد شهادات SSL
  • مراقبة حالة الخدمات وإعادة تشغيلها
  • تشغيل أوامر Laravel المجدولة

صيغة Cron

كل سطر في Crontab يتبع هذه الصيغة:

┌───────────── دقيقة (0-59)
│ ┌───────────── ساعة (0-23)
│ │ ┌───────────── يوم من الشهر (1-31)
│ │ │ ┌───────────── شهر (1-12)
│ │ │ │ ┌───────────── يوم من الأسبوع (0-7, 0 و 7 = الأحد)
│ │ │ │ │
* * * * * /path/to/command

أمثلة على الجداول

# كل دقيقة
* * * * * /path/to/script.sh

# كل 5 دقائق
*/5 * * * * /path/to/script.sh

# كل ساعة عند الدقيقة 0
0 * * * * /path/to/script.sh

# يومياً الساعة 3 فجراً
0 3 * * * /path/to/script.sh

# كل يوم اثنين الساعة 9 صباحاً
0 9 * * 1 /path/to/script.sh

# أول يوم من كل شهر
0 0 1 * * /path/to/script.sh

# كل 15 دقيقة خلال ساعات العمل (8ص - 6م)
*/15 8-18 * * * /path/to/script.sh

# يومي السبت والأحد الساعة 2 فجراً
0 2 * * 0,6 /path/to/script.sh

إدارة Crontab

# عرض المهام الحالية
crontab -l

# تعديل المهام
crontab -e

# عرض مهام مستخدم محدد
sudo crontab -u www-data -l

# حذف جميع المهام (استخدم بحذر)
crontab -r

مهام عملية شائعة

نسخ احتياطي لقاعدة البيانات

# ملف: /opt/scripts/backup-db.sh
#!/bin/bash

BACKUP_DIR="/opt/backups/mysql"
DATE=$(date +%Y-%m-%d_%H%M)
DB_NAME="production_db"
DB_USER="backup_user"
DB_PASS="secure_password"

# إنشاء مجلد النسخ
mkdir -p $BACKUP_DIR

# إنشاء النسخة
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz"

# حذف النسخ الأقدم من 30 يوم
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete

# تسجيل العملية
echo "$(date): Backup completed - ${DB_NAME}_${DATE}.sql.gz" >> /var/log/backup.log
# تشغيل يومياً الساعة 2 فجراً
0 2 * * * /opt/scripts/backup-db.sh

تنظيف السجلات والملفات المؤقتة

# ملف: /opt/scripts/cleanup.sh
#!/bin/bash

# حذف سجلات أقدم من 14 يوم
find /var/log -name "*.log" -mtime +14 -delete
find /var/log -name "*.gz" -mtime +30 -delete

# حذف ملفات tmp
find /tmp -type f -mtime +7 -delete

# حذف كاش Laravel
find /var/www/app/storage/logs -name "*.log" -mtime +7 -delete

# تسجيل حجم القرص بعد التنظيف
echo "$(date): Disk after cleanup: $(df -h / | tail -1 | awk '{print $5}')" >> /var/log/cleanup.log
# تشغيل يومياً الساعة 4 فجراً
0 4 * * * /opt/scripts/cleanup.sh

مراقبة الخدمات

# ملف: /opt/scripts/monitor.sh
#!/bin/bash

check_service {
 if ! systemctl is-active --quiet $1; then
 systemctl restart $1
 echo "$(date): $1 was down - restarted" >> /var/log/monitor.log
 fi
}

check_service nginx
check_service mysql
check_service php8.3-fpm
check_service redis-server
# فحص كل 5 دقائق
*/5 * * * * /opt/scripts/monitor.sh

تجديد شهادات SSL

# تجديد تلقائي مرتين في الأسبوع
0 3 * * 1,4 certbot renew --quiet --post-hook "systemctl reload nginx"

مهام Laravel المجدولة

Laravel يوفر نظام جدولة متقدم. تحتاج سطر Cron واحد فقط:

# تشغيل مجدول Laravel كل دقيقة
* * * * * cd /var/www/app && php artisan schedule:run >> /dev/null 2>&1

ثم تعرّف المهام في app/Console/Kernel.php:

protected function schedule(Schedule $schedule)
{
 // إرسال تنبيهات انتهاء الاشتراك يومياً
 $schedule->command('subscriptions:notify-expiring')
 ->dailyAt('09:00');

 // تنظيف الجلسات المنتهية
 $schedule->command('session:gc')
 ->hourly;

 // تقرير يومي
 $schedule->command('reports:daily')
 ->dailyAt('23:00')
 ->emailOutputTo('admin@example.com');
}

تصحيح الأخطاء

التحقق من تشغيل Cron

# هل خدمة cron تعمل؟
sudo systemctl status cron

# سجلات cron
sudo grep CRON /var/log/syslog | tail -20

أخطاء شائعة وحلولها

المشكلة السبب الحل
المهمة لا تعمل المسار غير كامل استخدم المسار الكامل دائماً
خطأ في الصلاحيات السكربت غير قابل للتنفيذ chmod +x script.sh
متغيرات البيئة مفقودة Cron بيئة محدودة حدد المتغيرات في السكربت
الأمر يعمل يدوياً فقط مسار PATH مختلف استخدم /usr/bin/php بدل php

اختبار قبل الجدولة

# شغّل السكربت يدوياً أولاً
bash /opt/scripts/backup-db.sh

# اختبر مع بيئة cron (محدودة)
env -i /bin/bash /opt/scripts/backup-db.sh

التكامل مع كلاود

سيرفرات كلاود (cloud.net.sa) تأتي بصلاحية root كاملة — تقدر تعدّل Crontab بحرية وتضبط أي عدد من المهام المجدولة. مع أقراص SSD سريعة، عمليات النسخ الاحتياطي والتنظيف تنتهي في ثوانٍ بدلاً من دقائق.


ابدأ الآن

تبي تجرب بنفسك؟ اختر باقة الاستضافة المناسبة أو صمم سيرفرك الخاص بالمواصفات اللي تبيها.

مشاركة