معالجة الأخطاء وتسجيلها في النصوص البرمجية
طبّقوا معالجة قوية للأخطاء، وأعيدوا توجيه مخرجات النصوص البرمجية، وأنشئوا سجلات مفيدة لمراقبة التنفيذ واستكشاف المشكلات وإصلاحها.
معالجة الأخطاء وتسجيلها في النصوص البرمجية درس مجاني في Linux Server Deployment & SSH Mastery على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Linux Server Deployment & SSH Mastery، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Linux Server Deployment & SSH Mastery 4 دروس في المجموع.
اجعل نصوصك البرمجية موثوقة
تخيّل أن نصك البرمجي يعمل على خادم وينفّذ مهمة مهمة. ماذا يحدث إذا وقع خطأ ما؟
- هل يتوقف عن العمل بصمت؟
- هل يترك وراءه فوضى؟
- هل يمكنك معرفة متى ولماذا حدث الخطأ؟
تتعامل النصوص البرمجية المتينة مع الأخطاء بسلاسة، وتوفّر سجلات واضحة. سيعلّمك هذا الدرس كيفية تحقيق ذلك!
فهم رموز الخروج
يعيد كل أمر ونص برمجي في Linux رمز خروج (أو حالة خروج) عند انتهائه. ويخبرك هذا الرقم بما إذا كان التنفيذ قد نجح أو فشل.
0: يعني النجاح! سارت الأمور على ما يرام.1-255: يعني الفشل. وقد يشير رقم معيّن إلى نوع الخطأ.
لنرَ ذلك عمليًا:
#!/bin/bash
# This script demonstrates exit codes
echo "Attempting a successful command..."
ls /tmp
echo "Exit code for 'ls /tmp': $?"
echo
echo "Attempting a failing command..."
ls /nonexistent_directory
echo "Exit code for 'ls /nonexistent_directory': $?"التحقق من حالة الأمر
بعد تنفيذ أي أمر، يمكنك التحقق من رمز الخروج الخاص به باستخدام المتغير الخاص $?. وهذا مفيد جدًا لاتخاذ القرارات في نصك البرمجي.
يمكنك استخدام عبارة if للاستجابة للنجاح أو الفشل:
#!/bin/bash
# Check if a file exists before trying to read it
FILENAME="test_file.txt"
touch $FILENAME # Create it for success case
if [ -f "$FILENAME" ]; then
echo "File '$FILENAME' exists. Processing..."
# ... do something with the file ...
rm $FILENAME # Clean up
else
echo "Error: File '$FILENAME' not found!"
exit 1
fi
echo "Script finished."`set -e`: الخروج عند الخطأ
في النصوص البرمجية البسيطة، قد يصبح التحقق يدويًا من $? في كل موضع أمرًا مملاً. يغيّر الأمر set -e سلوك نصك البرمجي كما يلي:
- إذا انتهى أي أمر بحالة غير صفرية (أي فشل)، يتوقف النص البرمجي فورًا.
- يمنع ذلك النص البرمجي من متابعة التنفيذ ببيانات قد تكون تالفة أو بحالة غير صالحة.
جرّب تشغيل هذا النص البرمجي. ماذا يحدث إذا فشل الأمر cp؟
#!/bin/bash
set -e
echo "Starting important operations..."
mkdir my_temp_dir
cp /nonexistent_source my_temp_dir/target # This will fail
echo "This line will not be reached if cp fails."
rmdir my_temp_dir
echo "Script finished successfully."استخدام `trap` للتنظيف
أحيانًا، حتى إذا فشل نص برمجي، تحتاج إلى تنفيذ مهام تنظيف، مثل إزالة الملفات المؤقتة. يتيح لك الأمر trap التقاط الإشارات (مثل الخروج أو الخطأ) وتشغيل أمر.
EXIT: يُشغَّل عند خروج النص البرمجي، سواء نجح أم فشل.ERR: يُشغَّل عند انتهاء أمر بحالة غير صفرية (إذا كانset -eمفعّلًا).
نضمن هنا إزالة دليل مؤقت دائمًا:
#!/bin/bash
TEMP_DIR="/tmp/my_script_temp_$(date +%s)"
function cleanup {
echo "Cleaning up temporary directory: $TEMP_DIR"
rm -rf "$TEMP_DIR"
}
trap cleanup EXIT
mkdir "$TEMP_DIR"
echo "Working in $TEMP_DIR..."
# Simulate some work, maybe it fails
# cp /nonexistent_file "$TEMP_DIR/" # Uncomment to test failure
echo "Script completed."إعادة توجيه المخرجات
عند تشغيل نصك البرمجي، فإنه يطبع رسائل غالبًا. وتنقسم هذه الرسائل إلى نوعين رئيسيين:
- المخرجات القياسية (stdout): الرسائل العادية (واصف الملف 1).
- الخطأ القياسي (stderr): رسائل الخطأ (واصف الملف 2).
يمكنك إعادة توجيه هذه التدفقات إلى ملفات بدلًا من عرضها على الشاشة:
command > file: يعيد توجيه stdout إلىfile.command 2> file: يعيد توجيه stderr إلىfile.
لنحفظ رسائل النجاح والخطأ بشكل منفصل.
#!/bin/bash
# Redirect stdout to success.log and stderr to error.log
echo "This is a success message." > success.log
ls /nonexistent_path 2> error.log
echo "Check success.log and error.log files."
# To view them after running:
# cat success.log
# cat error.logوضع جميع المخرجات في ملف واحد
غالبًا ما يكون من المفيد وضع كل من المخرجات القياسية والخطأ القياسي في ملف سجل واحد لتسهيل مراجعته. توجد طريقتان لتحقيق ذلك:
command > file 2>&1: يعيد توجيه stdout إلىfile، ثم يعيد توجيه stderr إلى الوجهة التي يذهب إليها stdout (أي الملف).command &> file: صيغة أقصر وأحدث للغرض نفسه.
يُعد هذا رائعًا لإنشاء سجل شامل لتنفيذ نصك البرمجي.
#!/bin/bash
# Redirect both stdout and stderr to a single log file
LOG_FILE="combined_script.log"
echo "Starting script..." &> "$LOG_FILE"
echo "This message goes to stdout." &>> "$LOG_FILE"
ls /nonexistent_dir 2>&1 | tee -a "$LOG_FILE"
echo "Script finished." &>> "$LOG_FILE"
echo "Check the '$LOG_FILE' file for all output."إضافة الطوابع الزمنية إلى سجلاتك
عند تصحيح الأخطاء، تُعد معرفة متى وقع الحدث أمرًا بالغ الأهمية. إن إضافة الطوابع الزمنية إلى رسائل السجل تجعلها أكثر فائدة بكثير.
يمكنك إضافة التاريخ والوقت الحاليين في بداية كل إدخال في السجل باستخدام الأمر date. ويساعد ذلك على تتبّع الأحداث بترتيبها الزمني.
#!/bin/bash
LOG_FILE="timestamped_script.log"
function log_message {
echo "$(date +%Y-%m-%d_%H:%M:%S) - $1" &>> "$LOG_FILE"
}
log_message "Script started."
sleep 1
log_message "Performing task A..."
# Simulate an error
ls /no_such_place || log_message "Error: Command failed."
sleep 1
log_message "Script finished."
echo "Check '$LOG_FILE' for timestamped entries."إرسال السجلات إلى سجلات النظام باستخدام `logger`
بالنسبة إلى الأحداث المهمة، قد ترغب في إرسال الرسائل مباشرةً إلى مرفق تسجيل النظام (syslog). وينفّذ الأمر logger ذلك تمامًا.
- غالبًا ما تُدار سجلات النظام باستخدام أدوات مثل
journalctl(على الأنظمة التي تستخدم systemd). - يؤدي ذلك إلى جمع الرسائل المهمة من نصك البرمجي مع أحداث النظام الأخرى في مكان مركزي.
- ويكون ذلك مفيدًا للأخطاء الحرجة أو مسارات التدقيق.
يمكن العثور على الرسائل المرسلة باستخدام logger عبر journalctl -f أو tail -f /var/log/syslog (بحسب نظامك).
#!/bin/bash
# Send a message to system logs
SCRIPT_NAME="MyBackupScript"
logger -t "$SCRIPT_NAME" "Starting daily backup operation."
# Simulate a task
sleep 2
if [ $(($RANDOM % 2)) -eq 0 ]; then
logger -t "$SCRIPT_NAME" -p user.info "Backup successful."
else
logger -t "$SCRIPT_NAME" -p user.err "Backup failed: Disk full."
fi
echo "Messages sent to system logs. Check with 'journalctl -t $SCRIPT_NAME'."التحقق من معالجة الأخطاء
لقد كتبت نصًا برمجيًا بلغة Bash لمعالجة بعض الملفات. وتريد أن يخرج النص البرمجي فورًا إذا فشل أي أمر داخله، كما تريد ضمان تنظيف دليل مؤقت مهما كانت طريقة خروج النص البرمجي.
ما الأمران في Bash اللذان ستستخدمهما بشكل أساسي لتحقيق ذلك؟
مراجعة وخطوات تالية
لقد تعلّمت كيفية جعل نصوص Bash البرمجية أكثر متانة وأسهل في تصحيح الأخطاء!
- رموز الخروج: فهم نجاح الأوامر أو فشلها.
set -e: الخروج تلقائيًا عند حدوث خطأ.trap: تنفيذ إجراءات التنظيف عند خروج النص البرمجي.- إعادة توجيه المخرجات: التحكم في وجهة stdout وstderr.
- الطوابع الزمنية: إضافة سياق إلى سجلاتك.
logger: التكامل مع تسجيل النظام على مستوى النظام بأكمله.
بتطبيق هذه الأساليب، ستصبح مهامك المؤتمتة أكثر موثوقية وأسهل في الإدارة. واصل التمرّن لبناء عمليات مؤتمتة متينة حقًا!
الأسئلة الشائعة
هل درس «معالجة الأخطاء وتسجيلها في النصوص البرمجية» مجاني؟
نعم — نص درس «معالجة الأخطاء وتسجيلها في النصوص البرمجية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Linux Server Deployment & SSH Mastery، انتقل إلى CoddyKit PRO. تتضمن دورة Linux Server Deployment & SSH Mastery 4 دروس في المجموع.
ماذا ستتعلم في «معالجة الأخطاء وتسجيلها في النصوص البرمجية»؟
طبّقوا معالجة قوية للأخطاء، وأعيدوا توجيه مخرجات النصوص البرمجية، وأنشئوا سجلات مفيدة لمراقبة التنفيذ واستكشاف المشكلات وإصلاحها. تتمرن على Linux Server Deployment & SSH Mastery مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Linux Server Deployment & SSH Mastery؟
لا تُشترط خبرة سابقة. Linux Server Deployment & SSH Mastery على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «معالجة الأخطاء وتسجيلها في النصوص البرمجية»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Linux Server Deployment & SSH Mastery هذا؟
نعم. كل درس في Linux Server Deployment & SSH Mastery يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مقدمة إلى برمجة Bash النصية
- أتمتة مهام الخادم
- معالجة الأخطاء وتسجيلها في النصوص البرمجية
- الدوال والوسائط والبرامج النصية القابلة لإعادة الاستخدام