دليل البدء في Systemd: الجزء العملي

< Systemd 入门教程:命令篇

دليل البدء في Systemd: الجزء العملي

المؤلف: رون ييفنغ

التاريخ: 8 مارس 2016

في المقالة السابقة، قدمت نظام Systemd. الأوامر الرئيسية اليوم سأقدم كيفية استخدامه لإنجاز بعض المهام الأساسية. bg2016030801

أولاً، بدء التشغيل

بالنسبة للبرامج التي تدعم Systemd، عند التثبيت، ستقوم تلقائيًا في /usr/lib/systemd/system أضف ملف تكوين إلى الدليل. إذا كنت ترغب في بدء تشغيل البرنامج عند تشغيل النظام، نفذ الأمر التالي (بـ httpd.service على سبيل المثال).

الأمر أعلاه يعادل في /etc/systemd/system إضافة رابط رمزي إلى الدليل، يشير إلى /usr/lib/systemd/system الداخلية httpd.service الملف. وذلك لأن عند تشغيل الجهاز، Systemd تنفيذ فقط /etc/systemd/system ملف التكوين في الدليل. وهذا يعني أيضًا أنه إذا تم وضع ملف التكوين المعدل في هذا الدليل، يمكن تحقيق تأثير استبدال التكوين الأصلي.

ثانياً، بدء الخدمة

بعد ضبط بدء التشغيل، لن يتم تشغيل البرنامج على الفور، يجب الانتظار حتى يتم تشغيل الجهاز في المرة القادمة. إذا كنت ترغب في تشغيل البرنامج الآن، فيجب تنفيذ systemctl start الأمر. بعد إعداد بدء التشغيل، لن يتم تشغيل البرنامج على الفور، يجب الانتظار حتى يتم تشغيل الكمبيوتر في المرة القادمة. إذا كنت ترغب في تشغيل البرنامج الآن، يجب تنفيذ systemctl start أمر.

بعد تنفيذ الأمر أعلاه، قد يحدث فشل في التشغيل، لذلك يجب استخدام systemctl status أمر لعرض حالة الخدمة.

النتيجة أعلاه تعني ما يلي.

المسار الخاص بملف الإعدادات، وما إذا كان يجب تعيينه ليبدأ عند تشغيل النظام. الصف النشط: يعني أنه قيد التشغيل معرّف العملية الرئيسي حالة السطر: الحالة الحالية للبرمجيات المقدمة من التطبيق نفسه (هنا httpd) كتلة CGroup: جميع العمليات الفرعية للتطبيق كتلة السجل: سجلات التطبيق

ثالثاً، إيقاف الخدمة

لإيقاف الخدمة التي تعمل حاليًا، يجب تنفيذ. systemctl stop أمر.

有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出 kill إشارة.

بالإضافة إلى ذلك، يجب تنفيذ إعادة تشغيل الخدمة. systemctl restart أمر.

رابعاً، فهم ملف التكوين

كيف يتم تشغيل خدمة ما يعتمد بالكامل على ملف التكوين الخاص بها. دعنا نلقي نظرة على محتويات ملف التكوين.

كما ذُكر سابقاً، يتم وضع ملفات التكوين بشكل رئيسي في /usr/lib/systemd/system الدليل، قد يكون أيضًا في /etc/systemd/system الفهرس. بعد العثور على ملف التكوين، استخدم محرر النصوص لفتحه. systemctl cat يمكن استخدام الأمر لعرض ملف التكوين، فيما يلي: sshd.service الملف كمثال، وظيفته هي تشغيل خادم SSH، ليتمكن المستخدمون الآخرون من تسجيل الدخول عبر SSH.

يمكن رؤية أن ملف التكوين مقسم إلى عدة كتل، كل كتلة تحتوي على عدد من أزواج المفتاح والقيمة.

سأقوم بشرح محتوى كل قسم بالتتابع.

خمسة، [الوحدة] الكتلة: تسلسل البدء والعلاقات الاعتمادية.

Unit كتلة Description يقدم الحقل وصفًا بسيطًا للخدمة الحالية. Documentation الحقل يعطي موقع الوثيقة. الإعدادات التالية هي ترتيب التشغيل والاعتمادات، وهذا أمر مهم للغاية.

After الحقل: يُظهر إذا network.target أو sshd-keygen.service يجب أن نبدأ، إذن sshd.service يجب أن يتم تشغيلها بعدهم.

بالنسبة لذلك، هناك واحد آخر. Before حقل، تعريف sshd.service يجب بدء التشغيل قبل أي خدمات. لاحظ أن، After و Before الحقل يتعلق فقط بترتيب التشغيل، ولا يتعلق بالعلاقات الاعتمادية.

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

Wants حقل: يمثل sshd.service مع sshd-keygen.service 之间存在"弱依赖"关系,即如果"sshd-keygen.service"启动失败或停止运行,不影响 sshd.service استمر في التنفيذ.

Requires 字段则表示"强依赖"关系,即如果该服务启动失败或异常退出,那么 sshd.service يجب أن تخرج أيضًا.

انتبه، Wants الحقل و Requires الحقول تتعلق فقط بالعلاقات الاعتمادية، ولا تتعلق بترتيب الإطلاق، وبشكل افتراضي يتم إطلاقها في نفس الوقت.

السادس، [الخدمة] قسم: سلوك البدء

Service كيف يتم بدء الخدمة الحالية وفقًا لتعريف الكتلة.

6.1 أوامر التشغيل

العديد من البرامج لديها ملفات معلمات بيئية خاصة بها، يمكن استخدام هذا الملف لـ EnvironmentFile قراءة الحقول.

EnvironmentFile الحقل: يحدد ملف معلمات البيئة للخدمة الحالية. يحتوي هذا الملف على key=value زوج المفاتيح والقيم، يمكن استخدامه $key في الشكل، الحصول على ذلك في ملف التكوين الحالي.

ملف معلمات البيئة لـ sshd في المثال أعلاه هو /etc/sysconfig/sshd أهم الحقول في ملف التكوين هي ExecStart

ExecStart الحقل: تعريف الأمر الذي يتم تنفيذه عند بدء عملية.

في المثال أعلاه، بدء التشغيل sshd الأمر المنفذ هو /usr/sbin/sshd -D $OPTIONS ، المتغيرات فيها $OPTIONS جاء من EnvironmentFile ملف معلمات البيئة المحدد بواسطة الحقل. هناك أيضًا حقول مشابهة لها.

ExecReload الحقل: الأمر المنفذ عند إعادة تشغيل الخدمة

ExecStop الحقل: الأمر الذي يتم تنفيذه عند إيقاف الخدمة

ExecStartPre الحقل: الأوامر المنفذة قبل بدء الخدمة

ExecStartPost الحقل: الأوامر التي يتم تنفيذها بعد بدء الخدمة

ExecStopPost الحقل: الأوامر التي يتم تنفيذها بعد إيقاف الخدمة

يرجى النظر إلى المثال أدناه.

ملف التكوين أعلاه، السطر الثاني ExecStart يعتبر القيمة فارغة، مما يعني إلغاء إعداد الصف الأول، والنتيجة كما يلي.

يمكن إضافة شرطة قبل جميع إعدادات بدء التشغيل. - ),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如, EnvironmentFile=-/etc/sysconfig/sshd (لاحظ الرمز "-" بعد علامة المساواة)، فهذا يدل على "حتى لو". /etc/sysconfig/sshd الملف غير موجود، ولن يتم إلقاء أي خطأ.

6.2 نوع الإقلاع

Type تعريف حقل نوع بدء التشغيل. القيم التي يمكن تعيينها كما يلي.

بسيط (القيمة الافتراضية): ExecStart عملية بدء الحقل هي العملية الرئيسية.

forking: ExecStart سيتم تقديم الحقول بـ fork() يتم بدء التشغيل بهذه الطريقة، في هذه الحالة ستخرج العملية الأصلية، وستصبح العملية الفرعية هي العملية الرئيسية.

أون شوت: مشابه لـ simple لكنها ستنفذ مرة واحدة فقط، وسيقوم Systemd بالانتظار حتى تكتمل قبل بدء الخدمات الأخرى.

ديبوس: مشابه لـ simple لكنها ستنتظر إشارة D-Bus لتبدأ.

إشعار: مشابه لـ simple بعد انتهاء الإقلاع، سيتم إرسال إشارة إشعار، ثم يقوم Systemd بتشغيل الخدمات الأخرى.

مشابه لـ simple لكن يجب الانتظار حتى يتم تنفيذ المهام الأخرى بالكامل قبل بدء هذه الخدمة. إحدى الاستخدامات هي لضمان عدم اختلاط مخرجات هذه الخدمة مع مخرجات الخدمات الأخرى.

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

في ملف التكوين أعلاه، RemainAfterExit تم تعيين الحقل إلى yes بعد خروج العملية، ستظل الخدمة مستمرة في التنفيذ. بهذه الطريقة، بمجرد استخدام systemctl stop أمر بوقف الخدمة، ExecStop سيتم تنفيذ الأمر المحدد، مما يعيد تشغيل لوحة اللمس.

6.3 سلوك إعادة التشغيل

Service تحتوي الكتلة على بعض الحقول التي تحدد سلوك إعادة التشغيل.

KillMode الحقل: تعريف كيفية إيقاف خدمة sshd في Systemd.

في المثال أعلاه،将 KillMode حدد كـ process ، مما يعني أنه سيتم إيقاف العملية الرئيسية فقط دون إيقاف أي من العمليات الفرعية لـ sshd، أي أن جلسات SSH التي فتحتها العمليات الفرعية ستظل متصلة. هذا الإعداد ليس شائعًا، ولكنه مهم لـ sshd، وإلا عند إيقاف الخدمة، ستقوم أيضًا بإنهاء جلسات SSH التي فتحتها بنفسك.

KillMode يمكن تعيين القيم للحقل كما يلي.

مجموعة التحكم (القيمة الافتراضية): سيتم قتل جميع العمليات الفرعية داخل مجموعة التحكم الحالية.

العملية: قتل العملية الرئيسية فقط

المعالج الرئيسي سيتلقى إشارة SIGTERM، بينما ستتلقى العمليات الفرعية إشارة SIGKILL.

لا توجد عمليات ستُقتل، فقط يتم تنفيذ أمر إيقاف الخدمة.

التالي هو Restart حقل.

Restart الحقل: يحدد طريقة إعادة تشغيل Systemd بعد خروج sshd.

في المثال أعلاه، Restart حدد كـ on-failure ، إذا حدث أي فشل غير متوقع، سيتم إعادة تشغيل sshd. إذا توقفت sshd بشكل طبيعي (مثل تنفيذ systemctl stop الأمر) ، فلن يعيد التشغيل.

Restart يمكن تعيين القيم للحقل كما يلي.

لا (القيمة الافتراضية): لن يتم إعادة التشغيل بعد الخروج

عند النجاح: سيتم إعادة التشغيل فقط عند الخروج بشكل طبيعي (حيث يكون رمز الخروج 0).

في حالة الفشل: سيتم إعادة التشغيل فقط عند الخروج غير الطبيعي (رمز الخروج غير 0)، بما في ذلك التوقف بواسطة إشارة أو انتهاء الوقت.

غير طبيعي: إعادة التشغيل تحدث فقط عند انتهاء الإشارة أو تجاوز الوقت المحدد.

on-abort: سيعاد تشغيله فقط عند تلقي إشارة إنهاء غير مُلتقطة.

على المراقب: سيعيد التشغيل فقط عند انتهاء المهلة.

دائمًا: بغض النظر عن سبب الخروج، دائمًا ما يتم إعادة التشغيل.

بالنسبة لعملية الحراسة، يُوصى بتعيينها على on-failure بالنسبة للخدمات التي تسمح بحدوث أخطاء في الخروج، يمكن تعيينها إلى on-abnormal

الأخيرة هي RestartSec حقل.

RestartSec الحقل: يشير إلى عدد الثواني التي يجب الانتظار قبل إعادة تشغيل الخدمة بواسطة Systemd. المثال أعلاه تم تعيينه للانتظار لمدة 42 ثانية.

سبعًا، [تثبيت] كتلة

Install الكتلة، تحديد كيفية تثبيت هذا الملف التكويني، أي كيفية جعله يبدأ عند تشغيل الجهاز.

WantedBy الحقل: يُشير إلى الهدف الذي تتواجد فيه هذه الخدمة.

Target تعني مجموعة الخدمة، وتشير إلى مجموعة من الخدمات. WantedBy=multi-user.target تشير إلى أن الهدف الذي يوجد فيه sshd هو multi-user.target هذا الإعداد مهم جدًا لأنه ينفذ systemctl enable sshd.service عند إصدار الأوامر، sshd.service رابط رمزي، سيتم وضعه في /etc/systemd/system تحت الفهرس multi-user.target.wants في الدليل الفرعي. يحتوي Systemd على هدف بدء افتراضي.

تظهر النتائج أعلاه أن الهدف الافتراضي للتشغيل هو multi-user.target ستبدأ جميع الخدمات في هذه المجموعة عند تشغيل الجهاز. هذا هو السبب. systemctl enable الأمر يمكن أن يحدد أسباب بدء التشغيل. عند استخدام Target، systemctl list-dependencies الأوامر و systemctl isolate الأوامر مفيدة أيضًا.

بشكل عام، هناك نوعان شائعان من الأهداف: واحد هو multi-user.target ، يشير إلى حالة سطر الأوامر المتعددة المستخدمين؛ الآخر هو graphical.target ، يُظهر حالة واجهة المستخدم الرسومية، وهو يعتمد على multi-user.target توجد في الوثائق الرسمية صورة واضحة جداً رسم بياني لعلاقات الاعتماد الهدف

ثمانياً، ملف إعدادات Target

تحتوي Target أيضًا على ملف التكوين الخاص بها.

يرجى ملاحظة أن ملف تكوين Target لا يحتوي على أمر بدء التشغيل. المعاني الرئيسية للحقول في النتائج المعروضة أعلاه هي كما يلي.

Requires الحقل: المتطلبات basic.target تشغيل معًا.

Conflicts حقل: حقل الصراع. إذا rescue.service أو rescue.target يتم التشغيل، multi-user.target لا يمكن تشغيله، والعكس صحيح.

After : يدل على multi-user.target في basic.target rescue.service rescue.target بعد ذلك، إذا كانت لديهم إمكانية التشغيل.

AllowIsolate السماح بالاستخدام systemctl isolate الأمر للتبديل إلى multi-user.target

تعديل ملف التكوين ثم إعادة التشغيل

بعد تعديل ملف التكوين، يجب إعادة تحميل ملف التكوين، ثم إعادة تشغيل الخدمات ذات الصلة.

(النهاية)

معلومات الوثيقة

إشعار حقوق النشر: إعادة نشر حرة - غير تجارية - غير مشتقة - الحفاظ على النسبة رخصة المشاركة الإبداعية 3.0

تاريخ النشر: 8 مارس 2016

لقد استخدمت مؤخرًا:

جمع قائمة الطعام QQ