الفصل 8.3 - كرون متقدم وsystemd Timers
أهداف التعلم
في نهاية هذا الفصل، ستكون قادرًا على:
- استخدام كرون النظام (/etc/crontab, /etc/cron.d)
- فهم anacron
- إنشاء systemd timers
- مقارنة كرون مع systemd timers
- إدارة سجلات كرون
- تنفيذ مهام مجدولة متقدمة
كرون النظام
/etc/crontab
التنسيق مع المستخدم:
# /etc/crontab
# Format: MIN HEURE JOUR MOIS JOUR_SEMAINE UTILISATEUR COMMANDE
# Exemple
0 2 * * * root /usr/local/bin/backup.sh
*/15 * * * * www-data /usr/local/bin/check.sh
تحرير:
sudo nano /etc/crontab
/etc/cron.d/
دليل لملفات كرون النظام:
# Créer fichier
sudo nano /etc/cron.d/mon-tache
# Format (avec utilisateur)
0 2 * * * user1 /usr/local/bin/script.sh
# Permissions importantes
sudo chmod 644 /etc/cron.d/mon-tache
المزايا:
- التنظيم حسب الملف
- سهل الإدارة
- لا حاجة إلى crontab -e
أدلة خاصة
/etc/cron.hourly/ # يتم التنفيذ كل ساعة (00:00)
/etc/cron.daily/ # يتم التنفيذ كل يوم (06:25)
/etc/cron.weekly/ # يتم التنفيذ كل أسبوع (الأحد 06:47)
/etc/cron.monthly/ # يتم التنفيذ كل شهر (الأول في 06:52)
وضع السكربتات القابلة للتنفيذ (بدون امتداد .sh)
Anacron
للأنظمة غير 24/7
Anacron ينفذ المهام حتى لو كان النظام مغلقًا.
# Configuration
/etc/anacrontab
# Format
# période délai identifiant commande
1 5 backup /usr/local/bin/backup.sh
7 10 weekly-clean /usr/local/bin/cleanup.sh
العمل:
- يتحقق إذا تم تنفيذ المهمة في الفترة
- إذا لم يتم، ينفذ بعد التأخير
- مثالي لأجهزة اللابتوب، الأنظمة المتقطعة
systemd Timers
بديل حديث لـ كرون
المزايا:
- تكامل مع systemd
- سجلات مع journalctl
- تبعيات بين الوحدات
- أكثر مرونة
إنشاء Timer
الخدمة:
# /etc/systemd/system/backup.service
[Unit]
Description=Backup Quotidien
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
User=backup
StandardOutput=journal
StandardError=journal
المؤقت:
# /etc/systemd/system/backup.timer
[Unit]
Description=Timer pour Backup Quotidien
Requires=backup.service
[Timer]
OnCalendar=daily
OnCalendar=02:00
Persistent=true
[Install]
WantedBy=timers.target
تفعيل:
sudo systemctl daemon-reload
sudo systemctl enable backup.timer
sudo systemctl start backup.timer
صيغة OnCalendar
# Format: DayOfWeek Year-Month-Day Hour:Minute:Second
# Tous les jours à 2h
OnCalendar=daily
OnCalendar=02:00
# Tous les lundis à 9h
OnCalendar=Mon *-*-* 09:00:00
# Le 1er de chaque mois
OnCalendar=monthly
OnCalendar=*-*-01 00:00:00
# Toutes les heures
OnCalendar=hourly
# Toutes les 15 minutes
OnCalendar=*:0/15
خيارات Timer
[Timer]
# Planification
OnCalendar=daily
OnBootSec=10min
OnUnitActiveSec=1h
# Persistance (exécute si manqué)
Persistent=true
# Accuratie (exécution approximative)
AccuracySec=1min
# Randomisation
RandomizedDelaySec=5min
مقارنة كرون مع Timers
| الميزة | كرون | systemd Timers |
|---|---|---|
| السجلات | ملفات منفصلة | journalctl |
| التبعيات | لا | نعم |
| الاستمرارية | لا | نعم (اختياري) |
| المرونة | محدودة | عالية |
| البساطة | بسيط | أكثر تعقيدًا |
| التوفر | في كل مكان | يتطلب systemd |
إدارة السجلات
سجلات كرون
# سجلات النظام
/var/log/syslog # Ubuntu/Debian
/var/log/cron # Red Hat/CentOS
# Voir logs cron
sudo grep CRON /var/log/syslog
sudo tail -f /var/log/syslog | grep CRON
سجلات systemd Timers
# سجلات المؤقت
sudo journalctl -u backup.timer
# سجلات الخدمة
sudo journalctl -u backup.service
# المتابعة
sudo journalctl -u backup.timer -f
# منذ تاريخ
sudo journalctl -u backup.timer --since "2024-01-01"
أمثلة متقدمة
النسخ الاحتياطي مع Timer
الخدمة:
[Unit]
Description=Backup Automatique
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
User=backup
StandardOutput=journal
StandardError=journal
المؤقت:
[Unit]
Description=Timer Backup Quotidien
[Timer]
OnCalendar=daily
OnCalendar=02:00
Persistent=true
RandomizedDelaySec=30min
[Install]
WantedBy=timers.target
التنظيف مع كرون
# /etc/cron.daily/cleanup
#!/bin/bash
# Nettoyage quotidien
find /var/log -name "*.log" -mtime +30 -delete
find /tmp -type f -mtime +7 -delete
المراقبة مع Timer
الخدمة:
[Unit]
Description=Check Disk Space
[Service]
Type=oneshot
ExecStart=/usr/local/bin/check-disk.sh
المؤقت:
[Unit]
Description=Timer Check Disk
[Timer]
OnCalendar=*:0/15
OnBootSec=5min
[Install]
WantedBy=timers.target
أفضل الممارسات
كرون
- استخدام المسارات المطلقة
- إعادة توجيه المخرجات/الأخطاء
- اختبار السكربتات يدويًا
- التوثيق في التعليقات
- التحقق من السجلات بانتظام
systemd Timers
- إنشاء خدمة منفصلة
- استخدام Persistent=true إذا لزم الأمر
- تكوين RandomizationDelay
- الاختبار مع OnBootSec أولاً
- المراقبة مع journalctl
ملخص
في هذا الفصل، تعلمت:
كرون النظام: /etc/crontab, /etc/cron.d/, أدلة خاصة
Anacron: للأنظمة المتقطعة
systemd timers: بديل حديث مع التبعيات
الصيغة: OnCalendar للجدولة المرنة
السجلات: journalctl للمؤقتات، /var/log للكرون
المقارنة: كرون بسيط، المؤقتات أكثر قوة
الممارسة: النسخ الاحتياطي، التنظيف، المراقبة المجدولة
الخطوات التالية
الوحدة 9: أمان النظام
الوحدة 10: إدارة الحزم
تم إنشاء الفصل في: ديسمبر 2024