cron هو المجدول الأصلي على Unix منذ السبعينيات — ممل، موثوق، موجود على كل نظام. هذا الدليل يغطي crontab للمستخدم مقابل /etc/cron.d، فخاخ البيئة، التقاط الأخطاء، ومتى يجب اللجوء لمؤقتات systemd بدلًا منه.
المتطلبات المسبقة
- Debian 12 مع
sudo. - سكربت أو سطر واحد تريد تشغيله على جدول.
الخطوة 1: تأكيد تثبيت cron وتشغيله
sudo apt install -y cron
sudo systemctl enable --now cron
sudo systemctl status cron --no-pager
الخطوة 2: crontab المستخدم مقابل cron النظام
ثلاثة أماكن للجدولة:
- crontab المستخدم —
crontab -e— يعمل كالمستخدم. /etc/cron.d/<name>— يعمل كمستخدم محدد. الأفضل للمهام التي تنشرها التطبيقات./etc/cron.{daily,hourly,weekly,monthly}/— سكربتات drop-in.
crontab -e
أضف سطرًا — لاحظ خمسة حقول في crontab المستخدم مقابل ستة في cron النظام:
*/5 * * * * /usr/local/bin/poll-queue.sh
0 3 * * * /usr/local/bin/nightly-backup.sh
cron النظام (/etc/cron.d/skyline-backup):
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=ops@example.sa
0 3 * * * ops /usr/local/bin/nightly-backup.sh
الخطوة 3: التقاط stdout و stderr
0 3 * * * /usr/local/bin/nightly-backup.sh >> /var/log/backup.log 2>&1
logrotate (/etc/logrotate.d/backup):
/var/log/backup.log {
weekly
rotate 8
compress
missingok
notifempty
}
الخطوة 4: تجاوز فخ PATH/env
مهام cron تعمل ببيئة ضئيلة. السبب الأول لـ "يعمل في shell ويفشل في cron" هو PATH و locale:
- استخدم مسارات مطلقة لكل ثنائي.
- اضبط
PATHوLANGأعلى crontab. - ضع المنطق المعقد في سكربت shell واستدعِه.
الخطوة 5: مرجع سريع للصياغة
* * * * * command
│ │ │ │ └── يوم الأسبوع (0-6)
│ │ │ └───── الشهر (1-12)
│ │ └──────── يوم الشهر (1-31)
│ └─────────── الساعة (0-23)
└────────────── الدقيقة (0-59)
الاختصارات المفيدة: @reboot, @daily, @hourly, @weekly, @monthly, @yearly.
التحقق
sudo grep CRON /var/log/syslog | tail -20
ls -la /var/log/backup.log
الخاتمة
cron هو الإجابة الصحيحة لـ 80% من المهام المجدولة. عندما تحتاج جدولة متقدمة بالتقويم، استخدم مؤقتات systemd.
الخطوات التالية
- للجدولة المدركة للوحدات راجع إدارة خدمات systemd.
- اقرن مع التحديثات الأمنية التلقائية.
Comments
0 total · 0 threads