تُعدّ أتمتة المهام المتكررة هدفًا ضمنيًا لكل مستخدم يتعلم أساسيات باش، فهي في الغالب الغاية الأساسية من كل سكربت نكتبه، وسنعرض في هذا المقال مجموعة سكربتات مفيدة يمكنك الاستناد عليها لتتعلم أتمتة أي مهمة تريدها على خوادم لينكس، سنستخدم هنا جميع المهارات التي تعلمناها خلال السلسلة بدايةً من المصفوفات والجمل الشرطية وكذلك الحلقات والمفاهيم الأخرى.
إنشاء سكربت باش لإدارة المستخدمين
تُعدّ عملية إنشاء مستخدم على خوادم متعددة مهمة تقليدية لأي مدير نظام، لكنها مع التكرار تصبح مملة وشاقة، سننشئ معًا سكربت باش يؤتمت هذه العملية ويُنشئ المستخدمين تلقائيًا.
سنُجهّز في البداية ملفًا نصيًّا يتضمن الأسماء hostnames أو عناوين IP للخوادم المطلوب إنشاء المستخدم عليها.
يبين الملف servers.txt التالي على سبيل المثال أسماء خمسة خوادم:
kabary@handbook:~$ cat servers.txt server1 server2 server3 server4 server5
لقد استخدمنا أسماء الخوادم هنا بدلًا من عناوين IP الخاصة بها لأن هذه العناوين مخزنة لدينا في الملف "etc/hosts/" الذي يتضمن الاسم hostname وعنوان IP المقابل له، وتستطيع أيضًا استخدام ملف إعدادات SSH.
والآن لنفحص سكربت إنشاء المستخدمين adduser.sh التالي:
#!/bin/bash servers=$(cat servers.txt) echo -n "Enter the username: " read name echo -n "Enter the user id: " read uid for i in $servers; do echo $i ssh $i "sudo useradd -m -u $uid $name" if [ $? -eq 0 ]; then echo "User $name added on $i" else echo "Error on $i" fi done
عند تنفيذ السكربت سيطلب منا إدخال اسم المستخدم والمُعرِّف الخاص به، ثم سيتصل السكربت بكل خادم من الخوادم المحددة في الملف servers.txt السابق عبر اتصال SSH ويُنشئ عليه المستخدم الذي طلبناه.
ننصح بمطالعة المزيد عن تقنية SSH للاتصال بالخوادم البعيدة عبر مشاهدة الفيديو التالي:
لنلاحظ الآن طريقة عمل السكربت بعد التنفيذ:
بهذا نكون قد نجحنا في إنشاء مستخدم يدعى ansible على الخوادم الخمسة المطلوبة.
يوجد نقطتان مهمتان للغاية يتوجب علينا فهمها عند التعامل مع سكربت من هذا النوع:
- ضرورة استخدم مفاتيح مرور pass phrases فارغة لجلسات ssh، أو استخدم الوكيل ssh-agent لتمرير هويتنا إلى الخادم البعيد حتى لا نضطر لإدخال كلمة المرور في أثناء عمل السكربت
- الحرص على امتلاك حساب مستخدم فعال وعالي الصلاحيات يتمتع بأذونات الوصول إلى جميع الخوادم المطلوبة بدون متطلبات تتعلق بكلمة المرور
تخيل أنك تحتاج لتعرف مستخدمين جدد على مائة خادم مثلًا، فكم ستكون العملية طويلة وشاقة، هنا تكمن أهمية الأتمتة إذ توفر عليك ساعات من العمل المضني.
أتمتة عمليات النسخ الاحتياطي
النسخ الاحتياطي مهمة أساسية لا غنى عنها في كل منظومة، وكثيرًا ما نستخدم سكربتات باش لأتمتة المهام، يبين السكربت backup.sh التالي مثالًا عليها:
#!/bin/bash backup_dirs=("/etc" "/home" "/boot") dest_dir="/backup" dest_server="server1" backup_date=$(date +%b-%d-%y) echo "Starting backup of: ${backup_dirs[@]}" for i in "${backup_dirs[@]}"; do sudo tar -Pczf /tmp/$i-$backup_date.tar.gz $i if [ $? -eq 0 ]; then echo "$i backup succeeded." else echo "$i backup failed." fi scp /tmp/$i-$backup_date.tar.gz $dest_server:$dest_dir if [ $? -eq 0 ]; then echo "$i transfer succeeded." else echo "$i transfer failed." fi done sudo rm /tmp/*.gzecho "Backup is done."
لنشرح السكربت أعلاه: أنشأنا في البداية مصفوفة تدعى backup_dirs سنكتب فيها أسماء المجلدات التي نريد أخذ نسخ احتياطية عنها، ثم عرّفنا ثلاثة متغيرات:
-
dest_dir
: لتحديد مجلد الوجهة الذي ستُحفظ فيه النسخ الاحتياطية -
dest_server
: لتعيين الخادم الهدف -
backup_time
: لتحديد تاريخ بدء عملية النسخ الاحتياطي
وبعدها أنشأنا حلقة for ستمر على المجلدات الموجودة في المصفوفة "backup_dirs" واحدًا واحدًا وتضغط كل مجلد منها باستخدام التعليمة tar
وتحتفظ بالنسخة المضغوطة في المجلد المؤقت tmp/
، ثم تنسخها إلى الخادم الهدف بواسطة التعليمة scp
، وبعد اكتمال النسخ ستُحذف الملفات المضغوطة من المجلد tmp/
.
يبين الخرج التالي أمثلة على طريقة عمل السكربت:
kabary@handbook:~$ ./backup.sh Starting backup of: /etc /home /boot /etc backup succeeded. etc-Aug-30-20.tar.gz 100% 1288KB 460.1KB/s 00:02 /etc transfer succeeded. /home backup succeeded. home-Aug-30-20.tar.gz 100% 2543KB 547.0KB/s 00:04 /home transfer succeeded. /boot backup succeeded. boot-Aug-30-20.tar.gz 100% 105MB 520.2KB/s 03:26 /boot transfer succeeded. Backup is done.
يمكننا جدولة السكربت باستخدام مهام cron job لتبدأ أعمال النسخ الاحتياطي عند منتصف الليل مثلًا، وذلك وفق التالي:
kabary@handbook:~$ crontab -e 0 0 * * * /home/kabary/scripts/backup.sh
يمكن معرفة المزيد عن جدولة المهام بواسطة cron بالاطلاع على الفيديو التالي على قناة أكاديمية حسوب:
مراقبة المساحات التخزينية المتوفرة على القرص الصلب
المساحات التخزينية على نظام الملفات في تناقص دائم وهذا أمرٌ مفروغٌ منه، وكل ما نستطيع القيام به تجاه هذا الأمر هو المراقبة والتصرف بالوقت المناسب حتى يؤدي التناقص المستمر إلى نفاذ المساحة وتعطل النظام، يساعدنا الأمر df
على عرض المساحات المتوفرة على أي نظام ملفات، وهذا مثال على استخدامه:
kabary@handbook:~$ df -h / /apps /database Filesystem Size Used Avail Use% Mounted on /dev/sda5 20G 7.9G 11G 44% / /dev/mapper/vg1-applv 4.9G 2.4G 2.3G 52% /apps /dev/mapper/vg1-dblv 4.9G 4.5G 180M 97% /database
كما نلاحظ هنا فالمساحة المخصصة لقاعدة البيانات database/
على نظام الملفات هذا تكاد تنفذ فنسبة استخدامها 97%، يمكنك عرض نسبة الاستخدام فقط بدون التفاصيل الأخرى بواسطة الأمر awk
.
دعونا لنستعمل الآن هذين الأمرين في السكربت disk_space.sh كما يلي:
#!/bin/bash filesystems=("/" "/apps" "/database") for i in ${filesystems[@]}; do usage=$(df -h $i | tail -n 1 | awk '{print $5}' | cut -d % -f1) if [ $usage -ge 90 ]; then alert="Running out of space on $i, Usage is: $usage%" echo "Sending out a disk space alert email." echo $alert | mail -s "$i is $usage% full" your_email fi done
يبدأ السكربت بإنشاء مصفوفة تدعى filesystems نكتب فيها أسماء مسارات أنظمة الملفات التي نود مراقبتها، ويوجد بعدها حلقة تكرار تُنَفذ عند كل عنصر من عناصر المصفوفة، وتستعلم عن نسبة استخدام المساحة التخزينية المخصصة له فإذا كانت أكبر من 90% سيُرسل لنا السكربت تنبيهًا عبر البريد الإلكتروني يخبرنا بأن المساحة على وشك النفاذ.
ملاحظة: لاستخدام السكربت السابق يتوجب استبدال your_email
بعنوان بريد إلكتروني حقيقي.
سنحصل على هذا الخرج بعد تنفيذ السكربت:
kabary@handbook:~$ ./disk_space.sh Sending out a disk space alert email.
وستكون رسالة البريد الإلكتروني مشابهة للتالي:
لنفترض الآن أننا نرغب بجدولة السكربت disk_space.sh ليعمل كل ست ساعات مرة باستخدام مهام cron، فسنكتب التالي:
kabary@handbook:~$ crontab -e 0 */6 * * * /home/kabary/scripts/disk_space.sh
الخاتمة
وصلنا لنهاية مقالنا الذي عرضنا لكم فيه أمثلة بسيطة توضح أتمتة المهام بواسطة سكربتات باش، إن الإمكانات الفعلية لباش أكبر بكثير، لذا ندعوكم لتجربة تطوير السكربتات الموجودة هنا وتنفيذ أفكار أخرى مختلفة لتقوية مهاراتكم في باش واكتساب القدرة على أتمتة أي عمل تحتاجه على خوادم لينكس، كانت هذه نصيحتنا في ختام سلسلتنا التعليمية عن باش، نذكرك أخيرًا برابط سلسلة تعلم البرمجة باستخدام باش .
ترجمة -وبتصرف- للمقال Automation With Bash.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.