انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

إدارة Cron Jobs: إنشاء المهام المجدولة

إنشاء وإدارة المهام المجدولة في Linux باستخدام crontab: صياغة تعبيرات cron، أمثلة عملية، تسجيل المخرجات وتجنب الأخطاء الشائعة.

وقت القراءة: 10 دقيقة إدارة الخادم
croncronjobcrontabمهام مجدولةlinuxأتمتةخادم

جدول المحتويات

إدارة Cron Jobs: إنشاء المهام المجدولة

Cron هو مجدول المهام في Linux الذي يشغّل الأوامر والسكريبتات تلقائياً في أوقات محددة أو على فترات منتظمة. إنه ضروري لأتمتة المهام المتكررة مثل النسخ الاحتياطي وتنظيف السجلات والتحقق من التحديثات.

خدمة cron مثبتة وتعمل افتراضياً على معظم توزيعات Linux. تحقق من حالتها بـ systemctl status cron أو systemctl status crond.

صياغة crontab

يتكون كل cron job من خمسة حقول زمنية والأمر المراد تنفيذه:

* * * * * /مسار/الأمر
│ │ │ │ │
│ │ │ │ └── يوم الأسبوع (0-7، 0 و7 = الأحد)
│ │ │ └──── الشهر (1-12)
│ │ └────── يوم الشهر (1-31)
│ └──────── الساعة (0-23)
└────────── الدقيقة (0-59)

الأحرف الخاصة

الحرفالمعنىمثال
*أي قيمة* * * * * = كل دقيقة
,قيم متعددة1,15 * * * * = الدقيقة 1 و15
-نطاق1-5 * * * * = الدقائق من 1 إلى 5
/خطوة*/5 * * * * = كل 5 دقائق

أمثلة عملية على تعبيرات Cron

hljs bash
# تشغيل كل دقيقة
* * * * * /usr/bin/script.sh

# تشغيل في بداية كل ساعة
0 * * * * /usr/bin/script.sh

# تشغيل يومياً في 02:30
30 2 * * * /usr/bin/backup.sh

# تشغيل كل اثنين في 08:00
0 8 * * 1 /usr/bin/weekly-report.sh

# تشغيل في الأول من كل شهر منتصف الليل
0 0 1 * * /usr/bin/monthly-cleanup.sh

# تشغيل كل 5 دقائق
*/5 * * * * /usr/bin/check-service.sh

# تشغيل أيام العمل (الاثنين-الجمعة) في 09:00
0 9 * * 1-5 /usr/bin/workday-task.sh

# تشغيل كل 6 ساعات
0 */6 * * * /usr/bin/sync.sh

اختصارات خاصة

hljs bash
@reboot    # مرة واحدة عند بدء تشغيل النظام
@yearly    # مرة في السنة (0 0 1 1 *)
@monthly   # مرة في الشهر (0 0 1 * *)
@weekly    # مرة في الأسبوع (0 0 * * 0)
@daily     # مرة في اليوم (0 0 * * *)
@hourly    # مرة في الساعة (0 * * * *)

استخدام crontab

تحرير crontab

hljs bash
# تحرير crontab المستخدم الحالي
crontab -e

# تحرير crontab مستخدم محدد (يتطلب root)
crontab -u اسم_المستخدم -e

# عرض crontab الحالي
crontab -l

# حذف crontab (استخدم بحذر!)
crontab -r

الأمر crontab -r يحذف جميع مهام cron ولا يمكن التراجع عنه. احتفظ بنسخة احتياطية أولاً: crontab -l > crontab_backup.txt.

ملفات Cron على مستوى النظام

تستخدم مهام cron على مستوى النظام مجلدات /etc/cron*:

hljs bash
# هيكل المجلدات
/etc/crontab          # ملف crontab الرئيسي للنظام
/etc/cron.d/          # ملفات cron للتطبيقات
/etc/cron.hourly/     # سكريبتات تعمل كل ساعة
/etc/cron.daily/      # سكريبتات تعمل يومياً
/etc/cron.weekly/     # سكريبتات تعمل أسبوعياً
/etc/cron.monthly/    # سكريبتات تعمل شهرياً

تسجيل مخرجات Cron

مراقبة ملفات السجل

hljs bash
# سجلات cron على Debian/Ubuntu
sudo tail -f /var/log/syslog | grep CRON

# على RHEL/CentOS
sudo tail -f /var/log/cron

# باستخدام journald
sudo journalctl -u cron -f

إعادة توجيه المخرجات إلى ملف

hljs bash
# إعادة توجيه stdout و stderr إلى ملف
30 2 * * * /usr/bin/backup.sh >> /var/log/backup.log 2>&1

# تسجيل الأخطاء فقط
30 2 * * * /usr/bin/backup.sh 2>> /var/log/backup-errors.log

# إخفاء جميع المخرجات
30 2 * * * /usr/bin/backup.sh > /dev/null 2>&1

اضبط logrotate لتدوير ملفات السجل حتى لا تنمو بلا حدود.

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

1. مشاكل متغيرات البيئة

لا يرث cron متغيرات بيئة shell المستخدم. عرّف PATH والمتغيرات الأخرى صراحةً:

hljs bash
# أضف في بداية crontab
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SHELL=/bin/bash

# أو استخدم المسارات الكاملة في الأوامر
30 2 * * * /usr/bin/python3 /home/user/script.py

2. صلاحية تنفيذ السكريبت

hljs bash
# منح صلاحية التنفيذ للسكريبت
chmod +x /home/user/backup.sh

# التحقق من الصلاحيات
ls -la /home/user/backup.sh

3. مشاكل مجلد العمل

hljs bash
# تحديد مجلد العمل صراحةً في مهمة cron
30 2 * * * cd /var/www/html && php artisan schedule:run

الخلاصة

Cron أحد الأدوات الأساسية في إدارة نظام Linux. مع الصياغة الصحيحة وإدارة متغيرات البيئة والتسجيل، يمكنك بناء أتمتة موثوقة. راجع مهامك بانتظام باستخدام crontab -l وراقب ملفات السجل للكشف المبكر عن المشاكل.