systemctl list services: كل طرق سرد خدمات Linux
- ١٢ سبتمبر ٢٠٢٦
- ٠٩:٠٠ ص
- بقلم Adrien Roche
- دروس

الأمر الواحد الذي يجب معرفته: systemctl list-units --type=service
على أي توزيعة تعمل بـ systemd — Ubuntu منذ 15.04، وDebian منذ 8، وRHEL وCentOS منذ 7، إضافة إلى Fedora وArch وopenSUSE — تكون كل خدمة وحدة systemd، وsystemctl هو الأداة التي تسردها:
systemctl list-units --type=service
يطبع هذا افتراضيًا كل وحدة خدمة موجودة حاليًا في ذاكرة systemd: الخدمات النشطة، أو التي لديها مهام في الانتظار، أو التي فشلت. وهو لا يعرض الخدمات المثبّتة التي لم تُشغَّل قط. وعندما يكون الخرج أطول من الطرفية، يمرّره systemctl إلى مُصفّح (less) — اضغط q للخروج، أو أضف --no-pager للطباعة مباشرة إلى stdout.
يحتوي كل سطر على خمسة أعمدة:
- UNIT — اسم الوحدة، مثل
ssh.service. وهذا هو الاسم نفسه الذي تمرّره إلىsystemctl statusوstartوstop. - LOAD — ما إذا كان ملف الوحدة قد حُلِّل بشكل صحيح:
loadedأوnot-foundأوbad-settingأوerrorأوmasked. - ACTIVE — الحالة العامة:
activeأوinactiveأوactivatingأوdeactivatingأوfailed. - SUB — الحالة التفصيلية الخاصة بنوع الوحدة: يمكن للخدمة أن تكون
runningأوexitedأوdeadوغيرها. - DESCRIPTION — النص المقروء للبشر المأخوذ من ملف الوحدة.
اقرأ ثنائي ACTIVE/SUB معًا: active (running) يعني أن هناك عملية حيّة الآن، بينما active (exited) يعني أن خدمة من نوع oneshot عملت بنجاح وانتهت — وهذا طبيعي لمهام الإعداد، وليس خطأً يحتاج إصلاحًا.
التصفية: العاملة أو الفاشلة أو الجميع
يصفّي الخيار --state= على أي قيمة من LOAD أو ACTIVE أو SUB، ويقبل قوائم مفصولة بفواصل:
# Only services with a live process
systemctl list-units --type=service --state=running
# Everything loaded, including stopped and dead services
systemctl list-units --type=service --all
# Only failures
systemctl list-units --type=service --state=failed
# Combine states
systemctl list-units --type=service --state=running,exited
systemctl --failed هو اختصار مدمج لمرشّح الفشل، ويستحق أن يصبح ردّ فعل تلقائيًا على أي جهاز تسجّل الدخول إليه. وللحصول على خرج قابل للمعالجة آليًا، يُسقط --no-legend سطور الترويسة والملخص، ويُسقط --plain رموز النقاط، فتبقى الأعمدة ثابتة لأجل awk أو cut. وللبحث بالاسم، مرّر الخرج إلى grep: systemctl list-units --type=service --all --no-pager | grep ssh.
ما يبدأ مع الإقلاع: systemctl list-unit-files
يجيب list-units على سؤال «ما الذي يعمل الآن؟». وللإجابة على «ما الذي سيبدأ مع الإقلاع؟»، اسرد ملفات الوحدات المثبّتة على القرص بدلًا من ذلك:
systemctl list-unit-files --type=service
systemctl list-unit-files --type=service --state=enabled
هنا يصف عمود STATE إعدادات الإقلاع، لا حالة التشغيل الفعلية:
enabled— يبدأ تلقائيًا مع الإقلاع (أو عند مُشغّله، في حالة الخدمات المُنشَّطة بمقبس أو مؤقّت).disabled— مثبّت، لكن لا شيء يبدأه تلقائيًا.static— لا يحتوي على قسم[Install]؛ يعمل فقط كتابع لوحدة أخرى ولا يمكن تمكينه مباشرة.masked— مرتبط رمزيًا بـ/dev/null؛ يرفض systemd تشغيله بأي شكل.generated— أُنشئ في وقت التشغيل بواسطة مُولِّد، عادةً من سكربت init قديم.
تطبع إصدارات systemd الحديثة أيضًا عمود preset (VENDOR PRESET أو PRESET بحسب الإصدار) يوضح ما هو الإعداد الافتراضي للتوزيعة. والفخّ الذي يجب تجنّبه: «مُمكَّن» لا يعني «يعمل»، و«مُعطَّل» لا يعني «متوقف». فقد تكون الخدمة مُعطَّلة ومع ذلك تعمل لأن أحدهم شغّلها يدويًا، أو مُمكَّنة ومع ذلك ميّتة لأنها انهارت. وعندما يكون الأمر مهمًا، راجع القائمتين معًا.
خدمة واحدة في المرة: status وis-active وis-enabled
بعد أن تلفت خدمة ما نظرك، اقترب منها أكثر:
systemctl status nginx
systemctl is-active nginx # prints: active | inactive | failed
systemctl is-enabled nginx # prints: enabled | disabled | static | masked
systemctl is-failed nginx
يعرض status الصورة الكاملة: حالة ACTIVE/SUB، ومعرّف العملية الرئيسي، ومدة التشغيل، واستهلاك الذاكرة، وشجرة عمليات cgroup، وآخر عشرة سطور من السجل. وعندما لا تكفي عشرة سطور، اذهب إلى السجل مباشرة عبر journalctl -xeu nginx (يصفّي -u بحسب الوحدة، ويقفز -e إلى النهاية، ويضيف -x نصًا توضيحيًا).
أوامر is-* مصمّمة للسكربتات: تطبع كلمة واحدة وتضبط رمز الخروج تبعًا لذلك — يخرج is-active بالرمز 0 فقط عندما تكون الوحدة نشطة، ويخرج is-enabled برمز غير صفري للوحدات المعطَّلة أو المحجوبة. أضف --quiet لكتم الخرج والاحتفاظ برمز الخروج فقط.
تعمل كل أوامر السرد أعلاه بحساب مستخدم عادي دون صلاحيات. أما إدارة الخدمات فعليًا — start وstop وenable وdisable — فتتطلب صلاحيات الجذر، لذا من المفيد أن تفهم كيف يعمل sudo وتبديل المستخدمين على Ubuntu قبل أن تتجاوز مجرّد قراءة الحالة. ولاحظ أيضًا أن وحدات مستوى المستخدم تقع في مدير منفصل: يسرد systemctl --user list-units --type=service الخدمات العاملة في جلستك الخاصة، وهذا سبب ظهور بعض الخدمات كأنها «مفقودة» من قائمة النظام.
ورقة مراجعة: القوائم التي ستستخدمها فعلًا
| الأمر | ما يعرضه |
|---|---|
systemctl list-units --type=service | الخدمات النشطة والفاشلة الموجودة حاليًا في الذاكرة |
systemctl list-units --type=service --all | كل خدمة محمّلة، بما فيها غير النشطة |
systemctl list-units --type=service --state=running | الخدمات التي لها عملية حيّة فقط |
systemctl --failed | الوحدات الفاشلة فقط — فحص الصحة اليومي |
systemctl list-unit-files --type=service | كل خدمة مثبّتة وإعداد إقلاعها |
systemctl list-unit-files --state=enabled | الوحدات التي تبدأ تلقائيًا مع الإقلاع |
systemctl status name | تفاصيل كاملة لخدمة واحدة مع سطور السجل الأخيرة |
systemctl is-active name | حالة بكلمة واحدة مع رمز خروج مناسب للسكربتات |
systemctl is-enabled name | إعداد الإقلاع لخدمة واحدة |
service --status-all | سرد بنمط SysV لسكربتات /etc/init.d (توافقية) |
سيناريوهات عمل واقعية
1. اعثر على الخدمة التي تفشل باستمرار
systemctl --failed
systemctl status myapp.service --no-pager -l
journalctl -xeu myapp.service
systemctl reset-failed myapp.service
ابدأ واسعًا بـ --failed، ثم اقرأ خرج status لمعرفة رمز الخروج وآخر سطور السجل، ثم تعمّق في السجل للحصول على التتبّع الكامل. وبعد إصلاح السبب الجذري وعودة الخدمة للعمل، يمسح reset-failed مدخل الفشل القديم كي يبدأ فحص الصحة التالي نظيفًا.
2. راجع ما سيبدأ في الإقلاع التالي
systemctl list-unit-files --type=service --state=enabled --no-legend | awk '{print $1}'
systemd-analyze blame
يمنحك الأمر الأول قائمة نظيفة بكل ما سيبدأ تلقائيًا — وهو مفيد قبل تحصين خادم أو تتبّع شيء ثبّتته قبل أشهر ونسيته. ثم يعرض systemd-analyze blame المدة التي استغرقتها كل وحدة في الإقلاع الأخير، وهنا تبرز الخدمات البطيئة فورًا.
3. أوامر سطر واحد للسكربتات والمراقبة
systemctl is-active --quiet nginx && echo up || echo down
systemctl list-units --type=service --state=running --no-legend --plain | awk '{print $1}'
systemctl show -p ActiveState,SubState nginx
systemctl list-units --type=service -o json # systemd 246 or newer
يطبع show -p أزواج Key=Value لا يتغير تنسيقها بين الإصدارات، ويتدفّق خرج JSON مباشرة إلى jq. وإذا وجدت نفسك تعيد الفحوص نفسها عند كل تسجيل دخول، فاجمعها في سكربت صغير — يشرح دليلنا حول ملفات .sh وبرمجة الشِل كيف تحوّل هذا النوع من المقتطفات إلى أداة قابلة لإعادة الاستخدام.
لا يوجد systemd؟ service --status-all وOpenRC
قبل أن تفترض وجود systemctl، تأكّد ممّا يعمل على الجهاز فعلًا — التحقّق من نظام التشغيل وإصداره من سطر الأوامر يستغرق عشر ثوانٍ ويخبرك ما إذا كنت على توزيعة systemd من الأصل. وإذا كان systemctl غير موجود، فأنت على SysV init أو OpenRC:
service --status-all
على Debian وUbuntu يمرّ هذا الأمر على /etc/init.d ويطبع [ + ] للعاملة، و[ - ] للمتوقفة، و[ ? ] للسكربتات التي لا تملك أمر status. وهو يعمل أيضًا على توزيعات systemd عبر طبقة توافقية، لكنه يرى سكربتات init فقط، لذا فضّل systemctl هناك. وعلى Alpine وGentoo، يكون OpenRC هو نظام الإقلاع: يسرد rc-status الخدمات في مستوى التشغيل الحالي، ويسرد rc-update show ما يبدأه كل مستوى تشغيل.
كل ما سبق يفترض أن لديك جهاز Linux تملك فيه صلاحيات الجذر وتستطيع تشغيل الخدمات وتعطيلها وإصلاحها بحرّية. وإذا احتجت جهازًا للتدريب — أو خادمًا نظيفًا لاستضافة أعمال حقيقية — فإن خادم Linux VPS مع صلاحيات جذر كاملة من rdp.monster يأتي بمعالج وذاكرة مخصّصين، ونطاق ترددي غير محدود (استخدام عادل)، وبدون KYC، ويُسلَّم بعد نحو 10 ثوانٍ من تأكيد الدفع، فتستطيع تشغيل systemctl list-units على خادمك الخاص في غضون دقيقة.
الأسئلة الشائعة
لماذا تظهر خدمة بحالة active (exited) بدل active (running)؟
Type=oneshot (أو RemainAfterExit=yes) تنفّذ مهمة مرة واحدة — تركيب الأقراص، إعداد جدار الحماية، التنظيف — ثم تخرج. وحينها يُبلّغ systemd عن active (exited): نجحت الوحدة وتُعدّ «مُشغَّلة»، لكن لا تبقى أي عملية خلفها. أما الخدمات الخفية مثل nginx أو sshd فتظهر بحالة active (running). وإذا ظهرت خدمة تتوقع أنها خفية بحالة exited، فافحص ملف وحدتها بـ systemctl cat name.service لترى كيف عُرّفت.ما معنى النقاط الملوّنة في خرج systemctl؟
systemctl status وsystemctl list-units مؤشّر حالة سريع: أخضر للنشط، وأبيض لغير النشط أو قيد التوقّف، وأحمر لحالات الفشل أو الخطأ. كما تُبرز الصفوف الفاشلة بالأحمر في القوائم، ما يجعل systemctl --failed سهل التفحّص. وفي السكربتات أو السجلات التي تُعيق فيها رموز الألوان، أضف --plain أو مرّر الخرج إلى أنبوب، فتختفي هذه الزخارف.هل هناك مكافئ في systemctl للأمر chkconfig --list؟
systemctl list-unit-files --type=service محلّ chkconfig --list، وهو يعرض كل خدمة مثبّتة وما إذا كانت enabled أو disabled أو static أو masked. ولخدمة واحدة، يحلّ systemctl is-enabled name محلّ chkconfig name، ويحلّ systemctl enable name محلّ chkconfig name on. وقد يبقى الأمر القديم موجودًا كطبقة توافقية، لكنه يغطّي سكربتات SysV القديمة فقط.كيف أمنع خدمة من البدء مع الإقلاع؟
sudo systemctl disable name لإزالة رابط الإقلاع الرمزي؛ أضف --now لإيقافها فورًا أيضًا. وتبقى الخدمة المعطَّلة قابلة للتشغيل يدويًا أو للاستدعاء كتابع لوحدة أخرى. وإذا أردت ألّا تبدأ أبدًا، استخدم sudo systemctl mask name، فيربط الوحدة بـ /dev/null بحيث تفشل كل محاولة تشغيل. ويمكن التراجع لاحقًا عبر systemctl unmask. تحقّق من النتيجة بـ systemctl is-enabled name.Adrien Roche — محرر البنية التحتية والاستضافة
مهندس أنظمة بخبرة تزيد عن 10 سنوات في تشغيل أساطيل Windows Server وLinux. يدير أدريان وثائق البنية التحتية في rdp.monster ويكتب أدلتنا حول RDP واستضافة VPS وإدارة الخوادم والشبكات وأدوات الخصوصية.
مقالات ذات صلة




