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

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