دليل البدء في Systemd: الجزء العملي أولاً، بدء التشغيل ثانياً، بدء الخدمة ثالثاً، إيقاف الخدمة رابعاً، فهم ملف التكوين خمسة، [الوحدة] الكتلة: تسلسل البدء والعلاقات الاعتمادية. السادس، [الخدمة] قسم: سلوك البدء 6.1 أوامر التشغيل 6.2 نوع الإقلاع 6.3 سلوك إعادة التشغيل سبعًا، [تثبيت] كتلة ثمانياً، ملف إعدادات Target تعديل ملف التكوين ثم إعادة التشغيل معلومات الوثيقة
المؤلف: رون ييفنغ
التاريخ: 8 مارس 2016
في المقالة السابقة، قدمت نظام Systemd. الأوامر الرئيسية اليوم سأقدم كيفية استخدامه لإنجاز بعض المهام الأساسية.
بالنسبة للبرامج التي تدعم Systemd، عند التثبيت، ستقوم تلقائيًا في
/usr/lib/systemd/system
أضف ملف تكوين إلى الدليل. إذا كنت ترغب في بدء تشغيل البرنامج عند تشغيل النظام، نفذ الأمر التالي (بـ
httpd.service
على سبيل المثال).
$ sudo systemctl enable httpd
الأمر أعلاه يعادل في
/etc/systemd/system
إضافة رابط رمزي إلى الدليل، يشير إلى
/usr/lib/systemd/system
الداخلية
httpd.service
الملف. وذلك لأن عند تشغيل الجهاز،
Systemd
تنفيذ فقط
/etc/systemd/system
ملف التكوين في الدليل. وهذا يعني أيضًا أنه إذا تم وضع ملف التكوين المعدل في هذا الدليل، يمكن تحقيق تأثير استبدال التكوين الأصلي.
بعد ضبط بدء التشغيل، لن يتم تشغيل البرنامج على الفور، يجب الانتظار حتى يتم تشغيل الجهاز في المرة القادمة. إذا كنت ترغب في تشغيل البرنامج الآن، فيجب تنفيذ
systemctl
start
الأمر. بعد إعداد بدء التشغيل، لن يتم تشغيل البرنامج على الفور، يجب الانتظار حتى يتم تشغيل الكمبيوتر في المرة القادمة. إذا كنت ترغب في تشغيل البرنامج الآن، يجب تنفيذ
systemctl start
أمر.
x
$ sudo systemctl start httpd
بعد تنفيذ الأمر أعلاه، قد يحدث فشل في التشغيل، لذلك يجب استخدام
systemctl
status
أمر لعرض حالة الخدمة.
x
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since 金 2014-12-05 12:18:22 JST; 7min ago
Main PID: 4349 (httpd)
Status: "Total requests: 1; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─4349 /usr/sbin/httpd -DFOREGROUND
├─4350 /usr/sbin/httpd -DFOREGROUND
├─4351 /usr/sbin/httpd -DFOREGROUND
├─4352 /usr/sbin/httpd -DFOREGROUND
├─4353 /usr/sbin/httpd -DFOREGROUND
└─4354 /usr/sbin/httpd -DFOREGROUND
12月 05 12:18:22 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
12月 05 12:18:22 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12月 05 12:22:40 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
النتيجة أعلاه تعني ما يلي.
المسار الخاص بملف الإعدادات، وما إذا كان يجب تعيينه ليبدأ عند تشغيل النظام. الصف النشط: يعني أنه قيد التشغيل معرّف العملية الرئيسي حالة السطر: الحالة الحالية للبرمجيات المقدمة من التطبيق نفسه (هنا httpd) كتلة CGroup: جميع العمليات الفرعية للتطبيق كتلة السجل: سجلات التطبيق
لإيقاف الخدمة التي تعمل حاليًا، يجب تنفيذ.
systemctl stop
أمر.
xxxxxxxxxx
$ sudo systemctl stop httpd.service
有时候,该命令可能没有响应,服务停不下来。这时候就不得不"杀进程"了,向正在运行的进程发出
kill
إشارة.
xxxxxxxxxx
$ sudo systemctl kill httpd.service
بالإضافة إلى ذلك، يجب تنفيذ إعادة تشغيل الخدمة.
systemctl restart
أمر.
x
$ sudo systemctl restart httpd.service
كيف يتم تشغيل خدمة ما يعتمد بالكامل على ملف التكوين الخاص بها. دعنا نلقي نظرة على محتويات ملف التكوين.
كما ذُكر سابقاً، يتم وضع ملفات التكوين بشكل رئيسي في
/usr/lib/systemd/system
الدليل، قد يكون أيضًا في
/etc/systemd/system
الفهرس. بعد العثور على ملف التكوين، استخدم محرر النصوص لفتحه.
systemctl
cat
يمكن استخدام الأمر لعرض ملف التكوين، فيما يلي:
sshd.service
الملف كمثال، وظيفته هي تشغيل خادم SSH، ليتمكن المستخدمون الآخرون من تسجيل الدخول عبر SSH.
xxxxxxxxxx
$ systemctl cat sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service
[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
Type=simple
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
يمكن رؤية أن ملف التكوين مقسم إلى عدة كتل، كل كتلة تحتوي على عدد من أزواج المفتاح والقيمة.
سأقوم بشرح محتوى كل قسم بالتتابع.
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
كيف يتم بدء الخدمة الحالية وفقًا لتعريف الكتلة.
العديد من البرامج لديها ملفات معلمات بيئية خاصة بها، يمكن استخدام هذا الملف لـ
EnvironmentFile
قراءة الحقول.
EnvironmentFile
الحقل: يحدد ملف معلمات البيئة للخدمة الحالية. يحتوي هذا الملف علىkey=value
زوج المفاتيح والقيم، يمكن استخدامه$key
في الشكل، الحصول على ذلك في ملف التكوين الحالي.
ملف معلمات البيئة لـ sshd في المثال أعلاه هو
/etc/sysconfig/sshd
أهم الحقول في ملف التكوين هي
ExecStart
。
ExecStart
الحقل: تعريف الأمر الذي يتم تنفيذه عند بدء عملية.
في المثال أعلاه، بدء التشغيل
sshd
الأمر المنفذ هو
/usr/sbin/sshd -D
$OPTIONS
، المتغيرات فيها
$OPTIONS
جاء من
EnvironmentFile
ملف معلمات البيئة المحدد بواسطة الحقل. هناك أيضًا حقول مشابهة لها.
ExecReload
الحقل: الأمر المنفذ عند إعادة تشغيل الخدمة
ExecStop
الحقل: الأمر الذي يتم تنفيذه عند إيقاف الخدمة
ExecStartPre
الحقل: الأوامر المنفذة قبل بدء الخدمة
ExecStartPost
الحقل: الأوامر التي يتم تنفيذها بعد بدء الخدمة
ExecStopPost
الحقل: الأوامر التي يتم تنفيذها بعد إيقاف الخدمة
يرجى النظر إلى المثال أدناه.
xxxxxxxxxx
[Service]
ExecStart=/bin/echo execstart1
ExecStart=
ExecStart=/bin/echo execstart2
ExecStartPost=/bin/echo post1
ExecStartPost=/bin/echo post2
ملف التكوين أعلاه، السطر الثاني
ExecStart
يعتبر القيمة فارغة، مما يعني إلغاء إعداد الصف الأول، والنتيجة كما يلي.
xxxxxxxxxx
execstart2
post1
post2
يمكن إضافة شرطة قبل جميع إعدادات بدء التشغيل.
-
),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如,
EnvironmentFile=-/etc/sysconfig/sshd
(لاحظ الرمز "-" بعد علامة المساواة)، فهذا يدل على "حتى لو".
/etc/sysconfig/sshd
الملف غير موجود، ولن يتم إلقاء أي خطأ.
Type
تعريف حقل نوع بدء التشغيل. القيم التي يمكن تعيينها كما يلي.
بسيط (القيمة الافتراضية):
ExecStart
عملية بدء الحقل هي العملية الرئيسية.forking:
ExecStart
سيتم تقديم الحقول بـfork()
يتم بدء التشغيل بهذه الطريقة، في هذه الحالة ستخرج العملية الأصلية، وستصبح العملية الفرعية هي العملية الرئيسية.أون شوت: مشابه لـ
simple
لكنها ستنفذ مرة واحدة فقط، وسيقوم Systemd بالانتظار حتى تكتمل قبل بدء الخدمات الأخرى.ديبوس: مشابه لـ
simple
لكنها ستنتظر إشارة D-Bus لتبدأ.إشعار: مشابه لـ
simple
بعد انتهاء الإقلاع، سيتم إرسال إشارة إشعار، ثم يقوم Systemd بتشغيل الخدمات الأخرى.مشابه لـ
simple
لكن يجب الانتظار حتى يتم تنفيذ المهام الأخرى بالكامل قبل بدء هذه الخدمة. إحدى الاستخدامات هي لضمان عدم اختلاط مخرجات هذه الخدمة مع مخرجات الخدمات الأخرى.
xxxxxxxxxx
[Unit]
Description=Switch-off Touchpad
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-off
[Install]
WantedBy=multi-user.target
نوع التشغيل في ملف التكوين أعلاه تم تعيينه إلى
oneshot
هذا يدل على أن هذه الخدمة تحتاج إلى التشغيل مرة واحدة فقط، ولا تحتاج إلى التشغيل لفترة طويلة. إذا تم إيقافها، وترغب في فتحها مرة أخرى في المستقبل، يجب تعديل ملف التكوين كما يلي.
xxxxxxxxxx
[Unit]
Description=Switch-off Touchpad
[Service]
Type=oneshot
ExecStart=/usr/bin/touchpad-off start
ExecStop=/usr/bin/touchpad-off stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
في ملف التكوين أعلاه،
RemainAfterExit
تم تعيين الحقل إلى
yes
بعد خروج العملية، ستظل الخدمة مستمرة في التنفيذ. بهذه الطريقة، بمجرد استخدام
systemctl
stop
أمر بوقف الخدمة،
ExecStop
سيتم تنفيذ الأمر المحدد، مما يعيد تشغيل لوحة اللمس.
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 على هدف بدء افتراضي.
xxxxxxxxxx
$ systemctl get-default
multi-user.target
تظهر النتائج أعلاه أن الهدف الافتراضي للتشغيل هو
multi-user.target
ستبدأ جميع الخدمات في هذه المجموعة عند تشغيل الجهاز. هذا هو السبب.
systemctl
enable
الأمر يمكن أن يحدد أسباب بدء التشغيل. عند استخدام Target،
systemctl
list-dependencies
الأوامر و
systemctl isolate
الأوامر مفيدة أيضًا.
xxxxxxxxxx
# عرض جميع الخدمات التي تتضمنها multi-user.target
$ systemctl list-dependencies multi-user.target
# التبديل إلى هدف آخر
# shutdown.target هو حالة الإغلاق
$ sudo systemctl isolate shutdown.target
بشكل عام، هناك نوعان شائعان من الأهداف: واحد هو
multi-user.target
، يشير إلى حالة سطر الأوامر المتعددة المستخدمين؛ الآخر هو
graphical.target
، يُظهر حالة واجهة المستخدم الرسومية، وهو يعتمد على
multi-user.target
توجد في الوثائق الرسمية صورة واضحة جداً
رسم بياني لعلاقات الاعتماد الهدف
。
تحتوي Target أيضًا على ملف التكوين الخاص بها.
xxxxxxxxxx
$ systemctl cat multi-user.target
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
يرجى ملاحظة أن ملف تكوين 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
。
بعد تعديل ملف التكوين، يجب إعادة تحميل ملف التكوين، ثم إعادة تشغيل الخدمات ذات الصلة.
x
# إعادة تحميل ملف التكوين
$ sudo systemctl daemon-reload
# إعادة تشغيل الخدمات ذات الصلة
$ sudo systemctl restart foobar
(النهاية)
إشعار حقوق النشر: إعادة نشر حرة - غير تجارية - غير مشتقة - الحفاظ على النسبة رخصة المشاركة الإبداعية 3.0 )
تاريخ النشر: 8 مارس 2016
لقد استخدمت مؤخرًا: