بسم الله الرحمن الرحيم
الحمد لله رب العالمين والصلاة و السلام على سيد المرسلين، سيدنا محمد عليه أفضل الصلاة و أتم التسليم
تمهيد
رنت هو نظام بدء init خفيف الوزن وقوي لإدارة الخدمات في أنظمة التشغيل الشبيهة بيونكس. تم تصميمه ليكون بسيطًا وموثوقًا وسريعًا، مما يجعله خيارًا شائعًا لإدارة الخدمات في البيئات البسيطة والحاوية (containerized environments).
في هذا المقال، سنستعرض كيفية إدارة الخدمات باستخدام Runit وكيفية إنشاء خدمات مخصصة مع مثال توضيحي.
ما هو Runit؟
كما مهدنا فإن Runit هو بديل لأنظمة البدء التقليدية مثل SysVinit أو systemd. يتبع فلسفة يونكس في القيام بشيء واحد بشكل جيد: إدارة الخدمات. يتكون Runit من ثلاثة مكونات رئيسية:
- runit-init: عملية البدء التي تبدأ النظام وتدير مستويات التشغيل (runlevels).
- runsvdir: برنامج خفي (daemon) يراقب أدلة الخدمات ويبدأ/يوقف الخدمات حسب الحاجة.
- runsv: المشرف على العمليات الذي يدير الخدمات الفردية.
يستخدم Runit على نطاق واسع في توزيعات مثل Void Linux وغالبًا ما يُفضل بسبب بساطته وموثوقيته.
إدارة الخدمات باستخدام Runit
يدير Runit الخدمات من خلال الأدلة والروابط الرمزية (symbolic links). يتم تمثيل كل خدمة بدليل يحتوي على نص run، والذي يحدد كيفية بدء الخدمة. توجد الخدمات عادةً في /etc/sv/، ويتم تمكين الخدمات عن طريق إنشاء روابط رمزية في /var/service/.
ملاحظة: تختلف كل توزيعة ونظام التشغيل عن ملف الخدمات ولكن معظمها تجدها في /etc/sv/ .
الأوامر الشائعة لإدارة الخدمات
- بدء خدمة:
لبدء خدمة، أنشئ رابطًا رمزيًا في/var/service/يشير إلى دليل الخدمة في/etc/sv/.
sudo ln -s /etc/sv/myservice /var/service/
بحيث أن myservice اسم الخدمة ولتكن مثلاُ mysqld فإن :
sudo ln -s /etc/sv/mysqld /var/service/
سيقوم Runit تلقائيًا ببدء الخدمة.
- إيقاف خدمة:
لإيقاف خدمة، قم بإزالة الرابط الرمزي من/var/service/.
sudo rm /var/service/myservice
ملاحظة: أفضل شخصياً بإستخدام الأمر unlink لإيقاف الخدمات مثل :
sudo unlink /var/service/myservice
سيقوم Runit بإيقاف الخدمة وتنظيفها.
- فحص حالة الخدمة:
استخدم الأمرsv statusللتحقق من حالة الخدمة.
sudo sv status /var/service/myservice
- إعادة تشغيل خدمة:
استخدم الأمرsv restartلإعادة تشغيل خدمة.
sudo sv restart /var/service/myservice
- تمكين خدمة عند بدء التشغيل:
يتم تمكين الخدمات تلقائيًا عند بدء التشغيل إذا كانت مرتبطة برمزية في/var/service/.
إنشاء خدمات مخصصة باستخدام Runit
إنشاء خدمة مخصصة في Runit أمر بسيط. تحتاج إلى إنشاء دليل خدمة يحتوي على نص run واختياريًا نص finish.
مثال: إنشاء خدمة مخصصة لخادم HTTP بسيط باستخدام Python
لنقم بإنشاء خدمة مخصصة لتشغيل خادم HTTP بسيط باستخدام Python.
- إنشاء دليل الخدمة:
أنشئ دليلًا للخدمة في/etc/sv/.
sudo mkdir -pv /etc/sv/pyhttpserver
- إنشاء نص
run:
نصrunهو نص برمجي يحدد كيفية بدء الخدمة. أنشئ ملفًا باسمrunفي دليل الخدمة:
sudo nano /etc/sv/pyhttpserver/run
أضف المحتوى التالي إلى نص run:
#!/bin/sh
exec python3 -m http.server -d /home 8080
اجعل النص البرمجي قابلًا للتنفيذ:
sudo chmod +x /etc/sv/pyhttpserver/run
- إنشاء نص
finish(اختياري):
يتم تنفيذ نصfinishعند إيقاف الخدمة. يمكن استخدامه لمهام التنظيف. أنشئ ملفًا باسمfinishفي دليل الخدمة:
sudo nano /etc/sv/pyhttpserver/finish
أضف المحتوى التالي إلى نص finish:
#!/bin/sh
echo "تم إيقاف خادم HTTP الخاص بـ Python."
اجعل النص البرمجي قابلًا للتنفيذ:
sudo chmod +x /etc/sv/pyhttpserver/finish
- تمكين الخدمة:
أنشئ رابطًا رمزيًا في/var/service/لتمكين الخدمة:
sudo ln -s /etc/sv/pyhttpserver /var/service/
سيقوم Runit ببدء خادم HTTP الخاص بـ Python على الفور.
- التحقق من الخدمة:
تحقق من حالة الخدمة باستخدام الأمر التالي:
sudo sv status /var/service/pyhttpserver
يجب أن ترى نتيجة مشابهة للآتي:
run: /var/service/pyhttpserver: (pid 1234) 5s
يمكنك الوصول إلى خادم HTTP عن طريق زيارة http://localhost:8080 في متصفحك.
مثال آخر ولكن مع تحديد الصلاحيات
في بعض الأحيان نريد أن نحدد المجموعة و المستخدمين لخدمة معينة، فإننا نستخدم الأمر chpst كما سنرى الآن مع تشغيل ايماكس:
- إنشاء دليل الخدمة:
أنشئ دليلًا للخدمة في/etc/sv/.
sudo mkdir -pv /etc/sv/runemacs
- إنشاء نص
run:
نصrunهو نص برمجي يحدد كيفية بدء الخدمة. أنشئ ملفًا باسمrunفي دليل الخدمة:
sudo nano /etc/sv/runemacs/run
أضف المحتوى التالي إلى نص run:
#!/bin/sh
exec chpst -u mohammed:users emacs -u mohammed --fg-daemon 2>&1
بحيث أن ايماكس سيعمل مع المستخدم mohammed أو مع مجموعة users كما هو في صفحة الدليل مع الخيار -u، اﻵن اجعل النص البرمجي قابلًا للتنفيذ:
sudo chmod +x /etc/sv/runemacs/run
- تمكين الخدمة:
أنشئ رابطًا رمزيًا في/var/service/لتمكين الخدمة:
sudo ln -s /etc/sv/runemacs /var/service/
التخصيص المتقدم
التسجيل (Logging)
يمكن لـ Runit التعامل مع تسجيل النتائج تلقائيًا لخدمتك. لتمكين التسجيل، أنشئ دليل log داخل دليل الخدمة وأضف نص run للمسجل.
- إنشاء دليل التسجيل:
sudo mkdir -p /etc/sv/pyhttpserver/log
- إنشاء نص
runللتسجيل:
sudo nano /etc/sv/pyhttpserver/log/run
أضف المحتوى التالي:
#!/bin/sh
exec svlogd -tt ./main
اجعل النص البرمجي قابلًا للتنفيذ:
sudo chmod +x /etc/sv/pyhttpserver/log/run
سيتم تسجيل ناتج الخدمة في /etc/sv/pyhttpserver/log/main/.
الخاتمة
أخيراً وليس آخراً، Runit هو أداة قوية وبسيطة لإدارة الخدمات في الأنظمة الشبيهة بيونكس. يجعل تصميمه البسيط من السهل إنشاء وإدارة الخدمات المخصصة. باتباع الخطوات الموضحة في هذا المقال، يمكنك إنشاء وإدارة خدماتك الخاصة باستخدام Runit، مما يضمن بدئها تلقائيًا عند التشغيل والإشراف عليها لضمان موثوقيتها. سواء كنت تدير خادمًا بسيطًا أو معقداً و حتى بيئة حاوية، يعد Runit خيارًا ممتازًا لإدارة الخدمات.
