مقدمة عن نظام إدارة خدمات النظام systemd

systemd

في جميع الأجهزة العاملة بنظم اللينكس و اليونيكس, أو النظم المشتقة عن هذين النظامين هناك برنامج أو خدمة (Process) تأخذ دائما (PID) أو رقم التعريف الشخصي 1 في النظام, و هي أساسا أول خدمة تقوم نواة النظام (Kernel) بتشغيلها, لتقوم هذه الخدمة أو البرنامج بعد ذلك بتشغيل بقية الخدمات التي يعتمد عليها نظام التشغيل, و تشكل بذلك الأب أو السلف لجميع الخدمات الأخرى في نظام التشغيل بما فيها الخدمات أو البرامج اليتيمة (التي لا تتبع لأي برنامج آخر).

لمن يعمل في نظم اللينكس و اليونيكس, أو النظم المشتقة عنهما, تعرف هذه الخدمة أو هذا البرنامج باسم (Init), و هو نفس الاسم للخدمة التي طورت أصلا في نظام اليونيكس عند بداياته, بينما تعرف في نظام اللينكس باسم (sysvinit), وهي في نظم اللينكس تتميز بفعالية عالية في العمل, قليلة أو نادرة المشاكل, و تم الحفاظ عليها و تطويرها مع تقدم نظام لينكس لمجاراة التحديثات الكبيرة في النظام نفسه و في نواته.

لكن sysvinit بدأت تصبح قديمة, بطيئة, و غير مرنة بالتعامل مع النوى الجديدة لأنظمة اللينكس, أضف إلى هذا أن البرامج مفتوحة المصدر المنافسة و التي تقوم بنفس الوظيفة لم تكن ذات فعالية أو قوة لاستبدال sysvinit, و لم ترقى حتى لدرجة المنافسة معها, باستثناء ابستارت (Upstart) الذي طورته شركة كونينكال في عام 2006 و هي نفس الشركة المطورة للنظام المحبوب أوبونتو, و شكل لاحقا مصدرا للجدل بين المطورين, بالإضافة إلى انه ربما كان في طريقه لاستبدال sysvinit ببطئ شديد, إلى أن ظهر البرنامج الجديد الذي يعرف باسم سيستمد (systemd), والذي يقود حاليا أحد أكبر الجدالات في تاريخ نظام لينكس في طريقه لاستبدال sysvinit في جميع التوزيعات الكبيرة, و يقوم الجميع بتبنيه حاليا في الإصدارات الأخيرة من أنظمة التشغيل بما فيها ريدهات ,سينتوس, ديبيان, اوبونتو, و غيرها.

و بغض النظر عن رأيك الشخصي كقارئ أو مستخدم لأحد أنظمة لينكس العديدة في هذه التغييرات الكبيرة التي تقوم بها التوزيعات تباعا, لا شك أن سيستمد (systemd) هو المستقبل الذي تعتمد عليه أنظمة لينوكس لقيادة خدمات بداية التشغيل و تحسين و تسريع عمليات بداية النظام مع اعطاء أولوليات أكبر للخدمات الأهم, و إدارة خدمات النظام كافة بالشكل الأمثل.

لنستعرض بعض التعليمات والأوامر الأساسية التي يحتاجها أي مستخدم لسيستمد في إدارة الخدمات المختلفة للينكس,.و للعلم هنا فإن الأمر الرئيسي الذي سنستخدمه في منفذ الأوامر للتحكم و إدارة الخدمات كافة هو systemctl, و يرجى الإنتباه هنا إلى وجوب استخدام هذا الأمر بصلاحيات root, و يجب على المستخدم تسبيق جميع العمليات المذكورة لاحقا بأمر sudo أو تحويل المستخدم إلى root قبل تطبيق الأوامر المذكورة.

لنستخدم الأمر وحيدا كبداية:

 systemctl

فباستخدامه وحيدا سيقوم البرنامج بطباعة كل ما يقوم بادارته من برامج و خدمات مع الوضع الحالي للخدمة لتحديد إذا ما كانت فعالة أو غير فعالة:

pic1

و لو أردنا الحصول على قائمة بالخدمات فقط, يمكن استخدام نفس الأمر للتحكم بسيستمد مع بعض الإضافات للتعليمة, و كمثال لنجرب الأمر التالي:

 systemctl list-units -t service

حيث ترمز الإضافة -t إلى تحديد نوعية البرامج التي نريد من سيستمد ان يظهرها, و في هذ الحالة استخدمنا service أي إظهار الخدمات فقط, و تعطينا المخرجات التالية:

pic2

و لو أردنا إظهار المزيد من المعلومات عن حالة خدمة محددة, فيجب ذكر اسم الخدمة بعد تعليمة التحكم بسيستمد, كمثال:

 systemctl status sshd.service

هنا حاولنا الإستفسار عن خدمة sshd تحديدا باستخدام الإضافة status, و لنتوقف هنا لتحليل مخرجات هذا الأمر:

pic3

  • في السطر الأول قام البرنامج بطباعة الإسم الكامل لخدمة “sshd”.
  • السطر الثاني يظهر مكان وجود ملف التشغيل لهذه الخدمة, حيث قام سيستمد باستخدام هذا الملف لتشغيل خدمة sshd, ثم طبع كلمة enabled التي تعني هنا أن الخدمة تعمل تلقائيا خلال عملة اقلاع نظام التشغيل.
  • السطر الثالث طبع كلمة active و هذا يعني أن الخدمة فعالة حاليا.
  • في الأسطر التالية قام البرنامج بطباعة بعض المعلومات عم الخدمة بما فيها رقم التعريف الحالي لها في النظام, ثم بعض الأسطر من ملف ال log او سجلات التشغيل والعمل التابعة للخدمة المذكورة.

بطبيعة الحال, إذا ما قمنا بتطبيق نفس الأمر على خدمة غير فعالة فإننا سنحصل على مخرجات مختلفة من سيستمد, مثلا إذا كانت خدمة firewall متوقفة و لا تعمل تلقائيا من قبل النظام:
systemctl status firewalld.service

 systemctl status firewalld.service

و المخرجات ستكون كالتالي:

pic4

من الضروري أيضا معرفة كيفية التحكم بالخدمات المختلفة باستخدام سيستمد, و يرجى الإنتباه هنا أنه في حال تطبيق الأوامر التالية ليس من الضروري الحصول على أي مخرجات دائما, فالأوامر في حال نجاح تطبيقها لا تقوم بطباعة أي مخرجات, كالقيام بالعمليات التالية:

  • إيقاف الخدمة (سابقا service sshd stop أو etc/init.d/sshd stop/):
    systemctl stop firewalld.service

     systemctl stop firewalld.service
  • تشغيل الخدمة (سابقا service sshd start أو etc/init.d/sshd start/):

     systemctl start firewalld.service
  • إعادة التشغيل (سابقا service sshd restart أو etc/init.d/sshd restart/):

     systemctl restart firewalld.service
  • تفعيل البدأ تلقائيأ (سابقا chkconfig sshd on):

     systemctl enable firewalld.service

    و هذا الأمر يعطينا المخرجات التالية (يعني أنه عمل):

pic5

  • إيقاف تفعيل البدء التلقائي (سابقا chkconfig sshd off):

     systemctl disable firewalld.service

    و هذا الأمر يعطينا المخرجات التالية:

pic6

و أخيرا, يجب التنويه أن جميع التعليمات المذكورة هي لمجرد البدأ باستخدام سيستمد (systemd), و للتعرف أكثر على إمكاناته كاملة يرجى الإضطلاع على صفحات كتيب التشغيل و المساعدة (man pages) الخاصة بالأمر systemctl او الموقع الرسمي الخاص بالبرنامج و مدونات مطوريه.

  • nasser

    شكرا على كل هذه المعلومات …
    هل يوجد كتاب عربى يشرح الامر باستفاضة اكثر … دلنا علية

مشاركة