كيفية إنشاء خدمة 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

من الجيد معرفة: 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 =” بتعيين حد ذاكرة ناعمة لتلك الخدمة.

نصيحة: يمكنك العثور على قائمة بالمتغيرات الصالحة عن طريق التشغيل man systemd.resource-control
في جلسة نهائية.
احفظ ملف الوحدة الخاص بك ، ثم إعادة تحميل خدمة النظام الخاصة بك:
sudo systemctl enable --now my-system-app.service
أخيرًا ، يمكنك مراقبة خدمات التشغيل الخاصة بك عن طريق التشغيل systemd-cgtop
.

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