كيفية إنشاء خدمة SystemD مخصصة في Linux


SystemD هو نظام init قوي ومتعدد الاستخدامات لتوزيع Linux. يمكنه تشغيل البرامج ، وإدارة موارد النظام ، وحتى التحكم في حالة الكمبيوتر. في هذه المقالة ، سأوضح كيف يمكنك استخدام SystemD للتحكم في تطبيقاتك عن طريق إنشاء وحدة خدمة مخصصة في Ubuntu.

ما هي وحدة خدمة النظام؟

وحدة الخدمة هي ملف منتظم يحتوي على تفاصيل حول كيفية تشغيل تطبيق معين. ويشمل البيانات الوصفية العامة للبرنامج ، وكيفية تشغيله ، وما إذا كان يمكن لـ SystemD الوصول إليه في جلسة منتظمة.

افتراضيًا ، يحتوي كل شيطان على جهاز يستند إلى نظام على شكل من أشكال ملف الخدمة. Openssh ، على سبيل المثال ، يستخدم وحدة الخدمة ssh.sevice في “/etc/systemd/system/” لتحديد كيفية تشغيلها في Debian و Ubuntu.

على المستوى الأساسي ، يتكون ملف وحدة الخدمة من ثلاثة أجزاء: الوحدة والخدمة وتثبيت الفئات. ال Unit يوفر القسم بيانات تعريف التطبيق وتبعيات التطبيق. ال Service يحدد القسم مكان التطبيق وكيف سيقوم SystemD بتشغيله. أخيرًا ، Install يصف القسم متى يمكن SystemD بدء التطبيق.

إنشاء خدمة SystemD مخصصة على مستوى النظام

أحد أكثر الاستخدامات شيوعًا للخدمة المخصصة هو أتمتة الأوامر التي تتطلب امتيازات الجذر أو الاستفادة من أجهزة ضبط الوقت للنظام. على سبيل المثال ، تساعد الخدمة المخصصة في ضمان بدء تشغيل خادم Minecraft بشكل صحيح بعد إعادة التشغيل.

لإنشاء خدمة على مستوى النظام المخصص في Linux ، ابدأ بجعل ملف وحدة النظام في الدليل الرئيسي للمستخدم:

nano ~/my-system-app.service

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

[Unit]
Description=My First Service
After=network.target
 
[Service]
Type=simple
ExecStart=/path/to/bin
Restart=always
 
[Install]
WantedBy=multi-user.target

استبدل متغير “الوصف” بتفاصيل خدمة مستوى المستخدم.

استبدل متغير “execstart” بمسار الملف الكامل للبرنامج الذي تريد تشغيله.

محطة توضح ملف وحدة نظام بسيط لخدمة على مستوى النظام.

احفظ ملفك الجديد ، ثم انسخه إلى دليل خدمات الجهاز الخاص بك:

sudo cp ./my-system-app.service /etc/systemd/system/

قم بتشغيل الأمر التالي لإعادة تشغيل Daemon Systemd:

sudo systemctl daemon-reload

اختبر الخدمة الجديدة على مستوى النظام عن طريق تشغيل الأمر التالي:

sudo systemctl start my-system-app.service

أخيرًا ، تأكد من أن خدمتك الجديدة تعمل بشكل صحيح عن طريق التحقق من حالتها في SystemCTL:

systemctl status my-system-app.service
محطة توضح الخدمة المخصصة تعمل بشكل صحيح.

إنشاء خدمة SystemD مخصصة على مستوى المستخدم

لا تقتصر وحدات الخدمة على تطبيقات مستوى النظام أو الخبراء. بمساعدة مستخدم SystemD ، من الممكن إنشاء خدمات بدون جذور. يتيح ذلك للمستخدمين غير الجذريين إدارة التطبيقات المحلية مع تحسين أمان الكمبيوتر الخاص بهم عن طريق الحد من البرامج مع الوصول إلى الجذر.

لإنشاء خدمة مخصصة على مستوى المستخدم في Linux ، قم بعمل ملف وحدة نظام جديد في الدليل الرئيسي للمستخدم:

nano ~/my-user-app.service

الصق الكتلة التالية من التعليمات البرمجية داخل ملف الوحدة الجديد:

[Unit]
Description=My First User Service
After=graphical-session.target
 
[Service]
Type=simple
ExecStart=/path/to/bin
 
[Install]
WantedBy=default.target

استبدل قيمة متغير “execstart” إلى مسار البرنامج الذي تريد تشغيله. نظرًا لأن هذه خدمة على مستوى المستخدم ، تأكد من أن حساب المستخدم الخاص بك لديه وصول مناسب إلى الثنائي.

محطة تبرز البرنامج النصي للمستخدم مع وصول مستخدم منتظم.

احفظ ملف الخدمة الجديد على مستوى المستخدم ، ثم قم بإنشاء دليل SystemD المحلي للمستخدم الخاص بك:

mkdir -p ~/.config/systemd/user/

انسخ ملف الخدمة الجديد على مستوى المستخدم إلى دليل SystemD المحلي للمستخدم الخاص بك:

cp ./my-user-app.service ~/.config/systemd/user/

تأكد من أن SystemD يتحقق من دليل المستخدم الخاص بك لملفات وحدة الخدمة الجديدة:

systemctl daemon-reload --user

أخيرًا ، تأكد من أن خدمتك الجديدة تعمل بشكل صحيح عن طريق التحقق من حالتها في SystemCTL:

systemctl --user status my-user-app.service
محطة توضح خدمة المستخدم المخصصة المعترف بها في SystemCTL.

من الجيد معرفة: SystemD هو أكثر من مجرد نظام init. تعرف على كيفية برنامجها الشقيق: Systemd-Boot يتراكم ضد اليرقة الشعبية.

تعديل خدمة النظام المخصص الخاص بك

واحدة من نقاط القوة الأساسية لـ SystemD هي أنها تتيح لك تخصيص كيفية تشغيل البرامج وإدارتها بالكامل.

إضافة متغيرات البيئة إلى خدمة مخصصة

تعد متغيرات البيئة جزءًا مهمًا من كل نظام Linux. أنها توفر بيانات إضافية لبرنامج دون العبث بملفات التكوين. مع SystemD ، من الممكن الاستفادة من متغيرات البيئة من خلال دمجها في وحدات الخدمة الخاصة بك.

ابدأ بتعطيل الخدمة التي تريد تعديلها:

systemctl --user disable --now my-user-app.service

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

sudo nano ~/.config/systemd/user/my-user-app.service

انتقل إلى “[Service]”القسم ، ثم أضف السطر التالي من التعليمات البرمجية أسفل المتغير” type = “:

أضف متغير البيئة الذي تريد إضافته إلى خدمتك المخصصة. في حالتي ، أريد إضافة متغير محرر للتأكد من أن خدمتي ترى مثيل VIM الخاص بي.

محطة توضح خدمة مع متغير بيئة معدلة.

احفظ ملف الخدمة المعدل ، ثم إعادة تحميل Daemon Systemd لتطبيق التغييرات الخاصة بك.

محطة توضح عملية إعادة تحميل الخفي.

أعد تشغيل خدمة النظام الجديدة الخاصة بك للاستفادة من متغير البيئة الجديد:

systemd --user start my-user-app.service

تقييد الخدمة المخصصة لمستخدم معين

بصرف النظر عن ملفات الوحدة على مستوى المستخدم ، يمكنك أيضًا تعديل خدمة على مستوى النظام لتشغيلها تحت مستخدم معين. هذا مفيد إذا كنت ترغب في تشغيل تطبيق تحت حساب مستخدم بدون جذور.

لربط خدمة SystemD للمستخدم ، قم أولاً بتعطيل الوحدة المخصصة تمامًا.

محطة توضح تفاصيل خدمة معاق بالكامل.

تأكد من وجود حساب المستخدم المستهدف بالفعل على جهازك.

محطة توضح وجود المستخدم لوحدة النظام.

افتح ملف خدمة على مستوى النظام باستخدام محرر النص المفضل لديك:

sudo nano /etc/systemd/system/my-system-app.service

انتقل لأسفل إلى “[Service]”القسم ، ثم إضافة المتغير” user = “متبوعًا باسم حساب المستخدم الخاص بك.

محطة تسليط الضوء على المستخدم = القيمة داخل ملف الخدمة المخصصة.

ملحوظة: يمكنك أيضًا تحديد المجموعة لخدمتك عن طريق إضافة “Group =” أسفل متغير المستخدم.

احفظ التغييرات على ملف وحدتك ، ثم أعد تشغيل الخدمة:

sudo systemctl start my-system-app.service

تأكد من أن خدمتك تعمل الآن كمستخدمك عن طريق تشغيل الأمر التالي:

ps -o user= -p $(systemctl show my-system-app.service -p MainPID | awk -F= 'print $2')
محطة توضح المالك الحالي لعملية النظام.

الحد من استهلاك موارد وحدة الخدمة

علاوة على تبديل متغيرات البيئة والمستخدمين ، يمكن لـ SystemD أن يحد من الموارد التي يمكن أن يستهلكها التطبيق خلال عمره. على الرغم من أنها لا تفعل ذلك افتراضيًا ، إلا أنه من الممكن التحكم في الأجزاء الأساسية مثل استخدام وحدة المعالجة المركزية وعدد العمليات الشاملة.

ابدأ بتعطيل الخدمة التي تريد تعديلها تمامًا.

محطة توضح خدمة نظام معاق.

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

sudo nano /etc/systemd/system/my-system-app.service

انتقل لأسفل إلى “[Service]”القسم ، ثم أضف الاسم المتغير للمورد الذي تريد الحد منه. على سبيل المثال ، يتيح لك إضافة متغير “MemoryHigh =” بتعيين حد ذاكرة ناعمة لتلك الخدمة.

محطة تسليط الضوء على قيمة MemoryHigh المعدلة للخدمة المخصصة.

نصيحة: يمكنك العثور على قائمة بالمتغيرات الصالحة عن طريق التشغيل man systemd.resource-control في جلسة نهائية.

احفظ ملف الوحدة الخاص بك ، ثم إعادة تحميل خدمة النظام الخاصة بك:

sudo systemctl enable --now my-system-app.service

أخيرًا ، يمكنك مراقبة خدمات التشغيل الخاصة بك عن طريق التشغيل systemd-cgtop.

محطة توضح إخراج systemd-cgtop.

إن تعلم كيفية إنشاء خدمات SystemD المخصصة وتعديلها حسب احتياجاتك هو مجرد خطوة في فهم هذه الأداة متعددة الاستخدامات للغاية. استكشف المزيد من SystemD وما يمكن أن يفعله نظامه البيئي الشامل عن طريق التحقق من أداء Run0 ضد Sudo.

الصورة الائتمان: Mikhail Fesenko عبر Unsplash. جميع التعديلات ولقطات الشاشة من قبل رامس الأحمر.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى