انتقل إلى المحتوى الرئيسي

الفصل 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