الفصل 11.3 - مراقبة Crons والتنبيهات
أهداف التعلم
في نهاية هذا الفصل، ستكون قادرًا على:
- مراقبة تنفيذ الـ crons
- اكتشاف فشل المهام
- تكوين التنبيهات للـ crons
- الإخطار عبر البريد الإلكتروني/Slack
- إنشاء لوحات مراقبة
- تنفيذ فحوصات الصحة
مراقبة الـ Crons
التحقق من التنفيذ
# عرض آخر عمليات التنفيذ
sudo grep CRON /var/log/syslog | tail -20
# بواسطة سكربت
sudo grep "mon-script.sh" /var/log/syslog
# journalctl
sudo journalctl -u cron --since "1 hour ago"
# التحقق مما إذا تم التنفيذ اليوم
sudo grep "mon-script.sh" /var/log/syslog | grep "$(date +%b\ %d)"
سكربت التحقق
#!/bin/bash
# التحقق من تنفيذ cron
SCRIPT="mon-script.sh"
LOG="/var/log/syslog"
EXPECTED_TIME="02:00" # الوقت المتوقع
# التحقق من التنفيذ اليوم
TODAY=$(date +%b\ %d)
EXECUTED=$(grep "$SCRIPT" "$LOG" | grep "$TODAY" | wc -l)
if [ "$EXECUTED" -eq 0 ]; then
echo "تنبيه: $SCRIPT لم يتم تنفيذه اليوم"
# إرسال تنبيه...
fi
اكتشاف الفشل
كود الإرجاع
#!/bin/bash
# سكربت مع إدارة الأخطاء
set -e # التوقف عند الخطأ
# معالجة...
if ! commande_importante; then
echo "خطأ: فشل الأمر" >&2
exit 1
fi
# نجاح
exit 0
التحقق من كود الإرجاع
#!/bin/bash
# التحقق من الفشل في السجلات
SCRIPT="mon-script.sh"
LOG="/var/log/script.log"
# البحث عن الأخطاء
ERRORS=$(grep -i "error\|failed\|échec" "$LOG" | wc -l)
if [ "$ERRORS" -gt 0 ]; then
echo "تنبيه: $ERRORS أخطاء في $SCRIPT"
# إرسال تنبيه...
fi
التنبيهات عبر البريد الإلكتروني
التكوين
# تثبيت mail
sudo apt install mailutils # Ubuntu/Debian
sudo yum install mailx # Red Hat/CentOS
# التكوين
# /etc/ssmtp/ssmtp.conf (Ubuntu)
# أو
# /etc/mail.rc (Red Hat)
سكربت مع البريد الإلكتروني
#!/bin/bash
# سكربت مع إشعار البريد الإلكتروني
ALERT_EMAIL="admin@example.com"
SCRIPT_NAME="mon-script.sh"
# تنفيذ السكربت
if /usr/local/bin/mon-script.sh; then
echo "نجاح: $SCRIPT_NAME تم تنفيذه" | \
mail -s "نجاح: $SCRIPT_NAME" "$ALERT_EMAIL"
else
echo "فشل: $SCRIPT_NAME فشل" | \
mail -s "تنبيه: $SCRIPT_NAME" "$ALERT_EMAIL"
exit 1
fi
Crontab مع البريد الإلكتروني
# Crontab
# إرسال المخرجات عبر البريد الإلكتروني
MAILTO=admin@example.com
0 2 * * * /usr/local/bin/script.sh
# أو إعادة التوجيه إلى البريد الإلكتروني
0 2 * * * /usr/local/bin/script.sh 2>&1 | mail -s "تقرير" admin@example.com
التنبيهات عبر Slack
Webhook Slack
#!/bin/bash
# إشعار Slack
SLACK_WEBHOOK="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
SCRIPT_NAME="mon-script.sh"
# الرسالة
MESSAGE="سكربت $SCRIPT_NAME: $(if [ $? -eq 0 ]; then echo 'نجاح'; else echo 'فشل'; fi)"
# إرسال
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"$MESSAGE\"}" \
"$SLACK_WEBHOOK"
وظيفة قابلة لإعادة الاستخدام
#!/bin/bash
# وظيفة إشعار Slack
notify_slack() {
local webhook="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
local message="$1"
local status="$2"
local color="good"
[ "$status" != "success" ] && color="danger"
curl -X POST -H 'Content-type: application/json' \
--data "{\"attachments\":[{\"color\":\"$color\",\"text\":\"$message\"}]}" \
"$webhook"
}
# الاستخدام
if mon-script.sh; then
notify_slack "نجاح السكربت" "success"
else
notify_slack "فشل السكربت" "failure"
fi
فحوصات الصحة
سكربت فحص الصحة
#!/bin/bash
# فحص الصحة للـ cron
SCRIPT="mon-script.sh"
LOCK_FILE="/var/run/$SCRIPT.lock"
MAX_AGE=3600 # 1 ساعة بالثواني
# التحقق من ملف القفل
if [ -f "$LOCK_FILE" ]; then
AGE=$(($(date +%s) - $(stat -c %Y "$LOCK_FILE")))
if [ "$AGE" -gt "$MAX_AGE" ]; then
echo "تنبيه: السكربت معلق منذ $AGE ثانية"
# إرسال تنبيه...
rm -f "$LOCK_FILE"
fi
fi
نبض القلب
#!/bin/bash
# نبض القلب للمراقبة
HEARTBEAT_FILE="/var/run/mon-script.heartbeat"
# تحديث الطابع الزمني
touch "$HEARTBEAT_FILE"
# التحقق في المراقبة
# إذا كان نبض القلب > 2 ساعة، تنبيه
لوحة مراقبة
سكربت التقرير
#!/bin/bash
# تقرير cron اليومي
REPORT="/var/log/cron-report-$(date +%Y%m%d).txt"
{
echo "=== تقرير CRON $(date) ==="
echo
echo "=== عمليات التنفيذ الناجحة ==="
grep "mon-script.sh" /var/log/syslog | grep -v "error" | wc -l
echo
echo "=== عمليات التنفيذ الفاشلة ==="
grep "mon-script.sh" /var/log/syslog | grep -i "error\|failed" | wc -l
echo
echo "=== آخر عمليات التنفيذ ==="
grep "mon-script.sh" /var/log/syslog | tail -10
echo
echo "=== الإحصائيات ==="
echo "إجمالي عمليات التنفيذ: $(grep 'mon-script.sh' /var/log/syslog | wc -l)"
} > "$REPORT"
# إرسال عبر البريد الإلكتروني
mail -s "تقرير Cron $(date +%Y-%m-%d)" admin@example.com < "$REPORT"
مراقبة متقدمة
سكربت مراقبة كامل
#!/bin/bash
# مراقبة كاملة للـ crons
LOG_DIR="/var/log/cron-monitoring"
mkdir -p "$LOG_DIR"
# قائمة الـ crons للمراقبة
CRONS=(
"backup.sh"
"cleanup.sh"
"report.sh"
)
for cron in "${CRONS[@]}"; do
# التحقق من التنفيذ
EXECUTED=$(grep "$cron" /var/log/syslog | grep "$(date +%b\ %d)" | wc -l)
# التحقق من الأخطاء
ERRORS=$(grep "$cron" /var/log/syslog | grep -i "error\|failed" | wc -l)
# السجل
echo "$(date): $cron - عمليات التنفيذ: $EXECUTED, الأخطاء: $ERRORS" >> \
"$LOG_DIR/monitoring.log"
# تنبيه إذا كان هناك مشكلة
if [ "$EXECUTED" -eq 0 ] || [ "$ERRORS" -gt 0 ]; then
echo "تنبيه: $cron - عمليات التنفيذ: $EXECUTED, الأخطاء: $ERRORS" | \
mail -s "تنبيه Cron" admin@example.com
fi
done
ملخص
في هذا الفصل، تعلمت:
المراقبة: التحقق من عمليات التنفيذ، اكتشاف الفشل
التنبيهات: البريد الإلكتروني، Slack، الإشعارات
فحوصات الصحة: ملفات القفل، نبضات القلب
التقارير: لوحات المراقبة، الإحصائيات
السكربتات: أتمتة المراقبة
الممارسة: المراقبة المستمرة، التنبيهات الاستباقية
الخطوات التالية
الوحدة 12: الإدارة المتقدمة (مع أتمتة crons)
نهاية الدورة: ملخص ومشاريع
تم إنشاء الفصل في: ديسمبر 2024