تعرَضنا في دروس سابقة لكيفيّة إدارة الملفات و المستخدمين على RedHat Enterprise Linux؛ نواصل في هذا الدّرس تناول المهامّ الأساسيّة لإدارة خادوم بشرح مبادئ إدارة العمليّات على RedHat Enterprise Linux 7.
نبدأ أوّلا بنظرة عامّة على ما يحدُث ابتداءً من اللحظة التي تشغّل فيها زرّ الطاقة على خادوم يعمل على توزيعة RHEL إلى اللحظة التي تظهر فيها شاشة تسجيل الدخول عبر سطر الأوامر.
مراحل الإقلاع
تنطبق هذه المراحل على توزيعات غنو/لينكس الأخرى مع وجود اختلافات طفيفة.
- يبدأ اختبار التشغيل الذاتي Power On Self Test بالتحقّق من العتاد Hardware.
- ينقل اختبار التشغيل الذاتي بعد اكتماله التحكمَ إلى محمِّل الإقلاع الأوّلي First stage boot loader الذي يوجد إما في مقطع الإقلاع على أحد أقراص الجهاز (نظام BIOS)؛ أو في تجزئة Partition منفصلة (نظام UEFI).
-
يمرّر محمّل الإقلاع الأولي التحكّم إلى محمّل الإقلاع الثاني Second stage boot loader الذي يوجد في المجلّد
boot/
. محمّل الإقلاع الأكثر استخداما هو GRUB (اختصار لـ GRand Unified Boot Loader). يبحث محمّل الإقلاع عن نواة النظام Kernel ونظام ملفات خاصّ يُعرف بـinitramfs
يحوي ملفّات وبرامج مهمتها إنجاز الخطوات الضروريّة لتركيب Mount نظام الملفّات الجذر (وهو نظام الملفّات المستخدَم في التجزئة التي يوجد عليها المجلّدroot/
). -
تضبط النواة العتاد الموصول بالنظام، ثم بعد تركيب نظام الملفات الجذر تشغّل عمليّة بمعرّف العمليات
1
PID. تجهّز هذه العمليّة بقيّة العمليّات التي من بينها العمليّة المسؤولة عن تسجيل الدخول. تُعرَف العمليّة ذات المعرّف1
بعمليّة التمهيد Initialization (أو init اختصارا).
ملحوظة: يغلب وصف محمّل الإقلاع Boot loader دون تحديد على محمّل الإقلاع الثاني.
يمكننا باستخدام الأمر ps
عرض لائحة بالعمليّات الحاليّة ذات العمليّة الأم (أي العمليّة التي بدأت تشغيلَ هذه العمليّات) systemd
(عمليّة التمهيد في نظام التمهيد SystemD الذي انتقلت إليه أغلب توزيعات لينكس الحديثة):
$ ps -o ppid,pid,uname,comm --ppid=1
يمكّننا الخيار o-
من تحديد نوعيّة المخرجات التي نرغب في عرضها؛ وهي في هذه الحالة معرّف العمليّة الأمّ ppid
، معرّف العمليّة pid
، اسم المستخدم الذي شغّل العمليّة uname
والأمر comm
. يحدّد المعطى الأخير شرطا هو أن يكون معرّف العمليّة الأم يساوي 1
(عمليّة التمهيد).
في ما يلي جزء من نتيجةِ تنفيذٍ للأمر:
PPID PID USER COMMAND 1 478 root systemd-journal 1 497 root lvmetad 1 513 root systemd-udevd 1 620 root auditd 1 644 root alsactl 1 645 root smartd 1 646 libstor+ lsmd 1 649 root rngd 1 650 root abrtd 1 651 root abrt-watch-log 1 655 root ModemManager 1 656 root systemd-logind 1 657 root irqbalance 1 658 avahi avahi-daemon 1 659 root firewalld 1 662 root accounts-daemon 1 667 root rsyslogd 1 668 root abrt-watch-log 1 673 rtkit rtkit-daemon 1 675 dbus dbus-daemon 1 690 root gssproxy 1 752 root VBoxService 1 760 root ksmtuned 1 762 polkitd polkitd (...)
ملحوظة: لجعل النتيجة أسهل للتصفح أعد توجيه الأمر ps
أعلاه إلى less
؛ ثم استخدم زرّ المسافة على لوحة المفاتيح للانتقال إلى الصفحة الموالية في النتائج، Ctrl
+u
للانتقال إلى الصفحة السابقة و q
للعودة إلى سطر الأوامر:
$ ps -o ppid,pid,uname,comm --ppid=1 | less
يساعد تخصيص مخرجات الأمر ps
في أمور منها على سبيل المثال معرفة العمليّات التي تتسبّب في زيادة استخدام المعالج أو الذاكرة:
$ ps aux --sort=+pcpu # ترتيب العمليات تصاعديًّا حسب نسبة استخدام المعالج $ ps aux --sort=-pcpu # ترتيب العمليات تنازليًّا حسب نسبة استخدام المعالج $ ps aux --sort=+pmem # ترتيب العمليات تصاعديًّا حسب نسبة استخدام الذاكرة $ ps aux --sort=-pmem # ترتيب العمليات تنازليًّا حسب نسبة استخدام الذاكرة # ترتيب العمليّات تصاعديًّا حسب استخدام المعالج وتنازليًّا حسب استخدام الذاكرة $ ps aux --sort=+pcpu,-pmem
مقدمة إلى SystemD
اعتمدت أغلب توزيعات لينكس الحديثة نظام التمهيد SystemD بدلا من أنظمة التمهيد القديمة (مثل SysVinit) نظرا للميزات التي يقدّمها؛ ومن أهمها:
- إمكانيّة أكبر لتنفيذ العمليّات بالتوازي أثناء التمهيد؛ على عكس SysVinit الأبطأ (ينفّذ SysVinit العمليّات الواحدة تلو الأخرى وينتظر التحقّق من اعتماديّات العمليّات قبل البدء في تشغيل خدمات النظام).
- يعمل بعد التمهيد على إدارة موارد النظام بطريقة أفضل؛ فالخدمات تشغَّل عند الحاجة إليها فقط من أجل تجنّب استهلاك موارد النظام في عمليّات غير متسخدَمة.
- التوافق العكسيّ مع سكربتات SysVinit.
تدير الأداة systemctl
نظام التمهيد SystemD؛ التي تؤدي دورَ الأدوات chkconfig و
service
و shutdown
في نظام التمهيد SysVinit. يبيِّن الجدول التالي التشابه بين عمل systemctl
وعمل الأدوات المذكورة.
الأمر في SysVinit | الأمر في SystemD | الوصف |
---|---|---|
service name start
|
systemctl start name
|
تشغيل الخدمة name |
service name stop
|
systemctl stop name
|
إيقاف الخدمة name |
service name condrestart
|
systemctl try-restart name
|
إعادة تشغيل الخدمة بشرط أن تكون تعمل حاليا |
service name restart
|
systemctl restart name
|
إعادة تشغيل الخدمة |
service name reload
|
systemctl reload name
|
إعادة تحميل إعدادات الخدمة |
service name status
|
systemctl status name
|
عرض حالة الخدمة |
service –status-all
|
systemctl
|
عرض حالة جميع الخدمات |
chkconfig name on
|
systemctl enable name
|
تفعيل تشغيل الخدمة مع إقلاع النظام حسب ما هو محدّد في ملف الوحدة Unit file. تتمثّل عمليّة تفعيل خدمة للتشغيل التلقائي مع الإقلاع (أو تعطيلها) في إضافة وصلات رمزيّة (أو حذفها) إلى المجلّد etc/systemd/system/ (أو حذفها منه).
|
chkconfig name off
|
systemctl disable name
|
تعطيل تشغيل خدمة مع إقلاع النظام. |
chkconfig --list name
|
systemctl is-enabled name
|
يتحقّق من ما إذا كانت الخدمة مفعَّلة حاليا أم لا |
chkconfig --list
|
systemctl --type=service
|
تعطيل جميع الخدمات مع ذكر ما إذا كانت الخدمة معطّلة أم مفعَّلة. |
shutdown -h now
|
systemctl poweroff
|
إيقاف الجهاز |
shutdown -r now
|
systemctl reboot
|
إعادة تشغيل النظام |
أضاف SystemD مفهومي الوحدة Unit إلى نظام التمهيد (التي يمكن أن تكون خدمة Service، نقطة تركيب Mount point، جهاز طرفي Device أو مقبس شبكي Network socket) والوجهة Target (الكيفيّة التي يدير بها SystemD عمليّات عدّة مرتبطة في ما بينها).
راجع مقال أساسيات Systemd: العمل مع الخدمات، الوحدات Units، واليوميات Journal للمزيد حول نظام التمهيد SystemD.
إدارة العمليات
تعديل الأولوية في التنفيذ
يُستخدَم الأمر renice
للتعديل على الأولويّة المعطاة لعمليّة أو عدّة عمليات. تستخدم النواةُ الأولويات لتحديد الكيفيّة التي ستخصّص بها موارد الجهاز للعمليّات. تتراوح الأولويّات Priorities (وتُعرَف أيضا بـ Nices) بين 20-
و 19
:
$ renice priority identifier
نحدّد بالمعطى الأول priority
الأولويّة التي نريد منحها؛ ثم نحدّد في المعطى الثاني معرّفات عمليّات p-
، معرّفات مستخدمين (أو أسماءهم) u-
أو معرّفات مجموعات مستخدمين (أو أسماءها) g-
. يمكن للمستخدم العادي تغيير أولويّة عمليّاته فقط بشرط ألا يؤدّي التغيير إلى نقص قيمة الأولويّة (قيمة أقلّ تعني أولويّة أكبر). بمعنى أنه يمكن للمستخدم تقليص استخدام عمليّاته للموارد إلا أنه لا يمكنه زيادتها.
يحاول الأمر التالي تغيير قيمة أولويّة العمليّة ذات المعرّف 10079
إلى 1-
:
$ renice -1 -p 10079
إن أردنا تغيير جميع عمليّات المستخدم academy
إلى نفس القيمة نطبّق الأمر كالتالي:
# renice -1 -u academy
إنهاء عملية
يُستخدَم الأمر kill
لإنهاء العمليّات؛ إلا أن طريقة إنهاء العمليّة تختلف. ينهي الأمر kill
العمليّة بإحدى طريقتيْن: إما أن يطلُب من العمليّة إنهاء مهامها (اجمعي أغراضك وانصرفي) أو يتولى هو المهمة بنفسه. إن لم نحدّد طريقة الإنهاء فسيستخدم الأمرُ الطريقةَ الأولى؛ لتحديد الطريقة الثانيّة نستخدم الخيّار 9-
. في الواقع، 9
هو معرّف إشارة يُرسلها النظام إلى العمليّة؛ وتتميّز بأنها إشارة لا يمكن للعمليّة تجاهلها (عكسَ الإشارة 15
اللطيفة المستخدَمة في طريقة الإنهاء الأولى).
يوجد الأمر pkill
الذي يعمل على إنهاء العمليّات بطريقة مشابهة للأمر kill
مع فرق أن kill
ينهي عمليّة (أو مجموعة عمليّات) بناء على المعرّف؛ في حين أن pkill
يمكن أن يستخدم اسم العمليّة أو خاصيّات أخرى.
استخدم أمر pgrep
إن أردت عرض عمليّات توافق شروطا معينة؛ إن طبّقت أمر pkill
على نفس الشروط فسينهي جميع العمليّات التي تنطبق عليها.
في المثال التالي نطلُب إنهاء جميع عمليّات المستخدم academy
:
# pkill -u academy
إنهاء العمليّات ليس عمليّة هامشيّة؛ لذا من المستحسن عرض لائحة بالعمليّات التي ينطبق عليها الأمر أعلاه قبل تنفيذه:
# pgrep -l -u academy
يمكنك الحصول على مزيد من التفاصيل عن الأوامر ps
، kill
والإشارات Signals في مقال إدارة العمليات (Process) في لينكس باستخدام الطرفية.
ترجمة -وبتصرّف- للمقال RHCSA Series: Process Management in RHEL 7: Boot, Shutdown, and Everything in Between – Part 5 لصاحبه Gabriel Cánepa.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.