

تستخدم معظم توزيعات Linux systemd كمدير للنظام والخدمات
يعد systemctl الأمر الرئيسي في systemd
ويستخدم للتحكم في الخدمات
سأوضح في هذا البرنامج التعليمي كيفية إنشاء ملف خدمة systemd يسمح لك بالتحكم في خدمتك باستخدام الأمر systemctl ، وكيفية إعادة تشغيل systemd دون إعادة التشغيل لإعادة تحميل ملفات الوحدة وكيفية تمكين الخدمة الجديدة.
سأقوم أيضًا بعرض ووصف أهم خيارات ملفات خدمة systemd مع الأمثلة الحية لملفات خدمة systemd.
قم بإنشاء ملف خدمة Systemd
أنشئ ملف خدمة systemd /etc/systemd/system/foo-daemon.service (استبدل foo-daemon باسم خدمتك):
$ sudo touch /etc/systemd/system/foo-daemon.service
$ sudo chmod 664 /etc/systemd/system/foo-daemon.service
افتح ملف foo-daemon.service وأضف الحد الأدنى من خيارات تكوين الخدمة التي تسمح بالتحكم في هذه الخدمة عبر systemctl:
[Unit]
Description=Foo
[Service]
ExecStart=/usr/sbin/foo-daemon
[Install]
WantedBy=multi-user.target
Path To Daemon: إذا كنت لا تعرف المسار الكامل إلى الخفي ، فجرّب foo-daemon.
بمجرد تغيير ملف الخدمة ، فإنه يحتاج إلى إعادة تحميل تكوين systemd:
$ sudo systemctl daemon-reload
الآن يجب أن تكون قادرًا على البدء والتوقف وإعادة التشغيل والتحقق من حالة الخدمة
$ sudo systemctl start foo-daemon
$ sudo systemctl stop foo-daemon
$ sudo systemctl restart foo-daemon
$ systemctl status foo-daemon
لتكوين خدمة لبدء التشغيل تلقائيًا عند التمهيد ، تحتاج إلى تمكينها:
$ sudo systemctl enable foo-daemon
للتحقق من سجلات الخدمة ، قم بتشغيل:
$ journalctl -u foo-daemon
خيارات ملف خدمة Systemd
تتكون ملفات خدمة Systemd عادةً من ثلاثة أقسام.
يتم تكوين عناصر التكوين العامة في أقسام [الوحدة] العامة و التثبيت .
يتم تكوين خيارات التكوين الخاصة بالخدمة في قسم الخدمة .
خيارات قسم [Unit] الهامة
Description: وصف موجز للوحدة.
Documentation : قائمة الوثائق المرجعية URIs.
Before, After: الترتيب الذي بدأت به الوحدات.
Requires : إذا تم تنشيط هذه الوحدة ، فسيتم أيضًا تنشيط الوحدات المدرجة هنا.
إذا تم إلغاء تنشيط إحدى الوحدات الأخرى أو فشلها ، فسيتم إلغاء تنشيط هذه الوحدة.
Wants : تكوين تبعيات أضعف مما يتطلب. إذا لم تبدأ أي من الوحدات المدرجة بنجاح ، فلن يكون لها أي تأثير على تنشيط الوحدة.
هذه هي الطريقة الموصى بها لإنشاء تبعيات وحدة مخصصة.
Conflicts : إذا كانت الوحدة بها إعداد تعارض في وحدة أخرى ، فإن بدء الأول سيوقف الأخير والعكس صحيح.
قائمة كاملة بخيارات قسم [Unit]:
$ man systemd.unit
خيارات قسم [install] مهمة
Alias : قائمة بالأسماء الإضافية للوحدة مفصولة بمسافات. يمكن لمعظم أوامر systemctl ، باستثناء تمكين systemctl ، استخدام الأسماء المستعارة بدلاً من اسم الوحدة الفعلي.
RequiredBy, WantedBy : سيتم بدء الخدمة الحالية عند بدء الخدمات المدرجة. راجع وصف يريد ويتطلب في قسم [الوحدة] للحصول على التفاصيل.
Also: يحدد قائمة بالوحدات التي سيتم تمكينها أو تعطيلها مع هذه الوحدة عند قيام المستخدم بتشغيل systemctl enable أو تعطيل systemctl.
قائمة كاملة بخيارات قسم [install]:
$ man systemd.unit
خيارات قسم [Service] الهامة
Type: تكوين نوع بدء العملية. واحد من:
Simple(افتراضي) – تبدأ الخدمة على الفور. من المتوقع أن يتم تحديد العملية الرئيسية للخدمة في ExecStart.
forking – يعتبر أن الخدمة قد بدأت بمجرد انقسام العملية وخروج الوالد.
ونشوت – مشابه للبسيط ، ولكن من المتوقع أن يتم إنهاء العملية قبل أن يبدأ systemd وحدات المتابعة (مفيد للنصوص البرمجية التي تقوم بعمل واحد ثم تخرج). قد ترغب في تعيين RemainAfterExit = نعم أيضًا بحيث يظل systemd يعتبر الخدمة نشطة بعد انتهاء العملية.
dbus – مشابه للبسيط ، لكنه يعتبر أن الخدمة بدأت عندما تكتسب العملية الرئيسية اسم D-Bus.
notify – مشابه للبسيط ، لكن لا يعتبر أن الخدمة بدأت إلا بعد أن ترسل إشارة خاصة إلى systemd.
خامل – مشابه للبسيط ، لكن التنفيذ الفعلي لثنائي الخدمة يتأخر حتى يتم الانتهاء من جميع الوظائف.
ExecStart
أوامر مع وسيطات لتنفيذها عند بدء الخدمة. يتيح Type = onehot تحديد أوامر مخصصة متعددة يتم تنفيذها بعد ذلك بالتتابع. يحدد ExecStartPre و ExecStartPost أوامر مخصصة ليتم تنفيذها قبل وبعد ExecStart.
ExecStop: أوامر للتنفيذ لإيقاف بدء الخدمة عبر ExecStart.
ExecReload: أوامر للتنفيذ لتشغيل إعادة تحميل التكوين في الخدمة.
إعادة التشغيل: مع تمكين هذا الخيار ، يجب إعادة تشغيل الخدمة عند إنهاء عملية الخدمة ، أو إنهاؤها ، أو انتهاء المهلة باستثناء التوقف العادي بواسطة أمر إيقاف النظام systemctl.
RemainAfterExit: في حالة الضبط على True ، تعتبر الخدمة نشطة حتى بعد إنهاء جميع عملياتها. مفيد مع Type=oneshot. القيمة الافتراضية هي False.
قائمة كاملة بخيارات قسم [Service]:
$ man systemd.service
أمثلة ملف خدمة Systemd


