جدولة المهام التلقائية باستخدام (Cron Jobs)
أهلاً يا شباب! اليوم بنتكلم عن أداة أساسية لأي مهندس أنظمة Linux: الـ Cron Jobs. لو عندك مهمة تحتاج تتنفذ بشكل دوري، سواء يومياً، أسبوعياً، أو حتى كل دقيقة، Cron هو الحل الأمثل.
1. إيش هو Cron؟
ببساطة، Cron هو شيطان (daemon) يشتغل في الخلفية على أنظمة Linux/Unix ويقوم بتنفيذ الأوامر أو السكربتات في أوقات محددة أنت تحددها. يعني "جدول مواعيد" لمهامك.
2. بنية جدول Cron (Crontab Syntax)
كل مهمة في Cron تسمى "cron job" وهي عبارة عن سطر في ملف يسمى "crontab". السطر هذا يتكون من 6 حقول:
* * * * * command_to_execute
- الحقل الأول (الدقائق):
0-59 - الحقل الثاني (الساعات):
0-23 - الحقل الثالث (أيام الشهر):
1-31 - الحقل الرابع (الأشهر):
1-12(أوJAN-DEC) - الحقل الخامس (أيام الأسبوع):
0-7(الأحد هو0أو7) - الحقل السادس: الأمر أو السكربت اللي تبغى تشغله.
ملاحظة: علامة النجمة
*تعني "كل قيمة ممكنة". يعني لو حطيتها في حقل الدقائق، معناه "كل دقيقة".
3. كيف تعدّل جدول Cron الخاص بك؟ (crontab command)
أسهل طريقة للتعامل مع جدول Cron الخاص بالمستخدم هي استخدام الأمر crontab.
عرض المهام المجدولة:
عشان تشوف المهام اللي عندك حالياً:
crontab -l
تعديل المهام المجدولة:
هذا الأمر بيفتح لك ملف crontab في محرر النصوص الافتراضي (غالباً vi أو nano). كل سطر تضيفه هو مهمة جديدة.
crontab -e
نصيحة: لا تعدّل ملفات
crontabيدوياً مباشرةً، استخدم دائماًcrontab -eعشان تتجنب مشاكل التنسيق.
حذف جميع المهام المجدولة:
هذا بيحذف كل مهامك في Cron بدون تأكيد، فاحذر!
crontab -r
4. أمثلة عملية
تشغيل سكربت كل دقيقة:
لو عندك سكربت اسمه myscript.sh في مجلدك الرئيسي وتبغاه يشتغل كل دقيقة:
* * * * * /home/user/myscript.sh
تأكد إن السكربت عنده صلاحيات تنفيذ (chmod +x myscript.sh).
تشغيل أمر معين كل يوم الساعة 3:30 صباحاً:
مثلاً، تنظيف ملفات مؤقتة:
30 3 * * * /usr/bin/find /tmp -type f -atime +7 -delete
تشغيل سكربت كل أول يوم في الشهر الساعة 10 صباحاً:
0 10 1 * * /path/to/monthly_report.sh
إعادة توجيه مخرجات الأمر:
عادةً، أي شيء يطبعه الأمر (output) بيرسل لك إيميل. عشان تتجنب هذا أو عشان تحفظ المخرجات في ملف:
* * * * * /home/user/myscript.sh >> /var/log/myscript.log 2>&1
هنا >> بتضيف المخرجات لملف السجل، و 2>&1 بتوجه رسائل الخطأ (stderr) لنفس ملف السجل.
إذا ما تبغى أي مخرجات أو إيميلات، وجهها لـ /dev/null:
* * * * * /home/user/myscript.sh > /dev/null 2>&1
5. سلاسل زمنية خاصة (Special Strings)
Cron عنده اختصارات مفيدة لجدولة المهام الشائعة:
@reboot: عند إعادة تشغيل النظام.@yearlyأو@annually: مرة واحدة في السنة (0 0 1 1 *).@monthly: مرة واحدة في الشهر (0 0 1 * *).@weekly: مرة واحدة في الأسبوع (0 0 * * 0).@dailyأو@midnight: مرة واحدة في اليوم (0 0 * * *).@hourly: مرة واحدة في الساعة (0 * * * *).
مثال:
@daily /home/user/daily_backup.sh
6. نصائح ذهبية
- المسارات الكاملة: دائماً استخدم المسار الكامل للأوامر والسكربتات (مثلاً
/usr/bin/phpبدلاً منphp). البيئة في Cron محدودة وقد لا تجد الأوامر. - اختبار السكربتات: اختبر السكربت يدوياً قبل ما تحطه في Cron عشان تتأكد إنه يشتغل صح.
- المخرجات والسجلات: لا تخلي Cron يرسل لك إيميلات كثيرة. وجه المخرجات لملفات سجلات عشان تقدر تراجعها لاحقاً.
- صلاحيات التنفيذ: تأكد أن السكربتات عندها صلاحيات تنفيذ (مثلاً
chmod +x script.sh). - المتغيرات البيئية: إذا السكربت حقك يعتمد على متغيرات بيئية معينة، الأفضل إنك تحددها داخل السكربت نفسه أو في بداية ملف
crontab(مثلاًPATH=/usr/local/bin:/usr/bin:/bin).
وبكذا نكون غطينا أساسيات Cron Jobs. الأداة هذي قوية جداً وبتوفر عليك وقت وجهد كبير في إدارة الأنظمة. طبق الأمثلة، وجرب بنفسك، وبتصير محترف فيها في وقت قصير!