كيفية إدارة الخدمات في لينكس باستخدام systemctl: شرح شامل مع أوامر أمثلة

目次

1. المقدمة

عند استخدام Linux، غالبًا ما تواجه مواقف تحتاج فيها إلى “التحقق من حالة الخدمات” أو “عرض قائمة العمليات الجارية”. في مثل هذه الحالات، يكون أمر systemctl مفيدًا للغاية.

هذا الأمر يدعم “systemd”، وهو نظام إدارة الإقلاع والخدمات في Linux، ويوفر مجموعة واسعة من الميزات مثل التحقق من حالة الخدمات (الوحدات)، بدء الخدمة، إيقافها، إعادة تشغيلها، وعرض القوائم.

خصوصًا من منظور “قائمة systemctl”، يمكنك الحصول على صورة شاملة للنظام، بما في ذلك الخدمات النشطة حاليًا، والخدمات المعطلة، وتلك التي تم تعيينها للتشغيل التلقائي.

في هذا القسم، سنوضح بإيجاز ما هو “systemctl” وما الذي يمكنك تعلمه من هذه المقالة.

ما هو systemctl؟

systemctl هو أداة قياسية للتحكم والتحقق من “الوحدات” المختلفة (الخدمات، الأهداف، نقاط التحميل، إلخ) في توزيعات Linux المعتمدة على systemd.

على سبيل المثال، يمكنك استخدامه لبدء أو إيقاف خدمات مثل Apache (httpd) أو SSH، أو لعرض حالة هذه الخدمات في قائمة.

العلاقة بين systemd وsystemctl

systemd هو جوهر عمليات الإقلاع وإدارة الخدمات في Linux، ويعد بديلًا للأنظمة القديمة مثل “SysVinit” و”Upstart”. أداة سطر الأوامر للتعامل مع systemd هي systemctl.

بمعنى آخر، إذا كان systemd هو “قائد العمليات”، فإن systemctl هو “المشغل” الذي ينفذ أوامره.

ما الذي ستتعلمه في هذه المقالة

ستجد في هذه المقالة إجابات للأسئلة التالية:

  • كيف يمكنني عرض قائمة الخدمات الجارية حاليًا؟
  • ماذا لو أردت عرض جميع الخدمات بما في ذلك غير النشطة؟
  • كيف أتحقق مما إذا كانت الخدمة معدة للتشغيل التلقائي؟
  • كيف أقرأ نتائج القوائم؟

سنشرح كل شيء بطريقة سهلة الفهم حتى للمبتدئين في Linux، مع أمثلة أوامر وطرق تفسير النتائج، لذا نأمل أن تتابع معنا حتى النهاية.

2. كيفية عرض قائمة الخدمات باستخدام systemctl

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

في هذا القسم، سنشرح طرق عرض القوائم من ثلاثة جوانب رئيسية:

  • قائمة الخدمات النشطة
  • قائمة جميع الخدمات (بما في ذلك غير النشطة)
  • قائمة ملفات وحدات الخدمات (بما في ذلك إعدادات التشغيل)

2.1 عرض قائمة الخدمات النشطة حاليًا

للاستخدام الأساسي، إذا أردت معرفة الخدمات “الجارية” على النظام حاليًا، استخدم الأمر التالي:

systemctl list-units --type=service

سيعرض هذا الأمر قائمة بجميع الخدمات النشطة (أي: التي تعمل حاليًا). تشمل النتائج البنود التالية:

اسم الحقلالوصف
UNITاسم الخدمة (مثال: ssh.service)
LOADهل تم تحميل ملف الوحدة أم لا
ACTIVEهل الخدمة نشطة أم لا (مثال: active, inactive, failed)
SUBالحالة التفصيلية (مثال: running, exited, dead)
DESCRIPTIONوصف الخدمة

باستخدام هذه المعلومات، يمكنك بسهولة التحقق مما إذا كان nginx يعمل حاليًا أو ما هي الخدمات النشطة.

2.2 عرض جميع الخدمات بما في ذلك غير النشطة

يرجى ملاحظة أن list-units الافتراضي يعرض الخدمات النشطة فقط. إذا كنت تريد رؤية جميع الخدمات، بما في ذلك غير النشطة، أضف الخيار --all:

systemctl list-units --type=service --all

باستخدام هذا الخيار، سيتم عرض الخدمات “غير النشطة” أو التي لم يتم تشغيلها مطلقًا.

وللمزيد من التصفية، يمكنك استخدام خيار --state= لاستخراج حالات معينة فقط.

systemctl list-units --type=service --state=inactive

وبذلك يمكنك تلبية احتياجات مثل “عرض الخدمات المتوقفة فقط” بكل سهولة.

2.3 التحقق من قائمة ملفات وحدات الخدمات

للتأكد ليس فقط من الحالة الحالية، ولكن أيضًا من الخدمات المفعلة والتي تعمل تلقائيًا عند الإقلاع، استخدم الأمر التالي:

systemctl list-unit-files --type=service

يعرض هذا الأمر قائمة ملفات وحدات الخدمات (ملفات التهيئة)، ويمكنك معرفة حالة التفعيل (enabled/disabled) لكل خدمة.

قيمة STATEالوصف
enabledيتم تفعيلها تلقائيًا عند الإقلاع
disabledلا يتم تفعيلها عند الإقلاع، يجب تشغيلها يدويًا
staticتعتمد على وحدات أخرى ولا يمكن تفعيلها/تعطيلها مباشرة
maskedتم تعطيلها بالكامل ولا يمكن تشغيلها (محمية)

يمكنك من خلال هذه القائمة معرفة “ما هي الخدمات التي ستعمل عند الإقلاع” أو “هل هناك خدمات محجوبة عن طريق الخطأ” وفهم التكوين الكامل للنظام بشكل مرئي.

3. أساسيات إدارة الخدمات باستخدام systemctl

لا يقتصر أمر systemctl على التحقق من حالة الخدمات فقط، بل يدعم أيضًا التشغيل، الإيقاف، إعادة التشغيل، وتكوين التشغيل التلقائي والمزيد. هنا نقدم أهم الأوامر المستخدمة يوميًا في إدارة الأنظمة.

من المهم جدًا إتقان هذه العمليات لإدارة الخوادم وحل المشاكل بكفاءة.

3.1 بدء خدمة

لتشغيل خدمة يدويًا، استخدم الأمر الفرعي start كما يلي:

sudo systemctl start اسم_الخدمة

مثال لتشغيل Apache (httpd):

sudo systemctl start httpd.service

سيتم تشغيل الخدمة فورًا. إذا أردت الحفاظ على تشغيلها بعد إعادة التشغيل، استخدم أيضًا enable كما سنشرح لاحقًا.

3.2 إيقاف خدمة

لإيقاف خدمة، استخدم الأمر التالي:

sudo systemctl stop اسم_الخدمة

مثال:

sudo systemctl stop sshd.service

لن تعمل الخدمة مرة أخرى حتى يتم تشغيلها يدويًا بالأمر start.

3.3 إعادة تشغيل خدمة

إذا كنت بحاجة إلى إعادة تشغيل الخدمة (مثلًا بعد تغيير الإعدادات)، استخدم الأمر التالي:

sudo systemctl restart اسم_الخدمة

مثال:

sudo systemctl restart nginx.service

يتم إيقاف الخدمة ثم تشغيلها مجددًا بغض النظر عن حالتها الحالية.

3.4 التحقق من حالة خدمة

للاطلاع على تفاصيل حالة الخدمة، استخدم الأمر الفرعي status:

systemctl status اسم_الخدمة

مثال:

systemctl status mysql.service

يعرض هذا الأمر حالة الخدمة الحالية، معرف العملية (PID)، وملخص السجلات، وهو مفيد جدًا عند حل المشاكل.

3.5 تفعيل التشغيل التلقائي لخدمة

لجعل الخدمة تعمل تلقائيًا عند إعادة التشغيل، استخدم الأمر الفرعي enable:

sudo systemctl enable اسم_الخدمة

مثال:

sudo systemctl enable docker.service

ستعمل الخدمة تلقائيًا عند إقلاع النظام في المرة التالية.

3.6 تعطيل التشغيل التلقائي لخدمة

لإلغاء التشغيل التلقائي، استخدم الأمر:

sudo systemctl disable اسم_الخدمة

مثال:

sudo systemctl disable cups.service

لن يتم تشغيل الخدمة تلقائيًا عند الإقلاع بعد ذلك.

3.7 التحقق من حالة إعداد التشغيل التلقائي

للتحقق مما إذا كانت الخدمة مفعلة تلقائيًا (enabled) أو معطلة (disabled)، استخدم:

systemctl is-enabled اسم_الخدمة

مثال للإخراج:

enabled

يمكنك بهذه الطريقة معرفة سياسة تشغيل الخدمة بسرعة.

4. خيارات systemctl المتقدمة والتقنيات التطبيقية

لا يقتصر أمر systemctl على العمليات الأساسية فقط، بل يدعم أيضًا مهام إدارة متقدمة. في هذا القسم، نعرض بعض الميزات التطبيقية والخيارات المفيدة التي تعزز من كفاءتك في إدارة الخدمات.

باستخدام هذه التقنيات، يمكنك جعل إدارة خدمات Linux أكثر فاعلية.

4.1 عرض تبعيات الخدمة

في Linux، غالبًا ما تعتمد بعض الخدمات على وحدات أو خدمات أخرى. للتحقق من علاقات التبعية، استخدم الأمر التالي:

systemctl list-dependencies اسم_الخدمة

مثال:

systemctl list-dependencies nginx.service

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

4.2 عرض محتوى ملف الوحدة

للاطلاع على إعدادات خدمة معينة، يمكنك عرض ملف الوحدة (.service) مباشرةً:

systemctl cat اسم_الخدمة

مثال:

systemctl cat ssh.service

يعرض هذا الأمر مسار ومحتوى ملف الوحدة المحمّل حاليًا. مفيد للتحقق من التخصيصات والتعديلات.

4.3 إعادة تحميل ملفات الوحدات

بعد تعديل ملفات الوحدات يدويًا، ولتطبيق التغييرات، استخدم:

sudo systemctl daemon-reexec

أو الأكثر شيوعًا:

sudo systemctl daemon-reload

بذلك، سيعيد systemd تحميل جميع ملفات الوحدات ويعكس التغييرات. إذا لم ترَ التغييرات بعد التعديل، جرب هذا الأمر أولًا.

4.4 التحقق من سجل تنفيذ الوحدة (ملاحظة)

رغم أن systemctl لا يدير السجلات مباشرة، فإن أمر journalctl مفيد جدًا لعرض سجلات الخدمات:

journalctl -u اسم_الخدمة

مثال:

journalctl -u docker.service

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

5. المشاكل الشائعة وطرق معالجتها

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

تعلم هذه الخطوات الأساسية سيساعدك على التعامل مع الأعطال بثقة وهدوء.

5.1 نقاط التحقق عند فشل بدء الخدمة

عند محاولة بدء خدمة ما، قد تظهر رسالة خطأ مثل:

Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.

في هذه الحالة، يمكنك تحديد السبب بسهولة باتباع الخطوات التالية:

  1. تحقق من الحالة
   systemctl status اسم_الخدمة
  1. مراجعة سجل الأخطاء
   journalctl -xe
  1. إعادة تحميل ملفات الوحدة
    إذا عدلت ملف الوحدة مؤخرًا، شغّل الأمر التالي لإعادة التحميل.
   sudo systemctl daemon-reload
  1. التحقق من تعارض المنافذ
    تحقق إذا كان هناك عملية أخرى تستخدم نفس المنفذ بالأمر التالي:
   sudo netstat -tulnp | grep رقم_المنفذ

5.2 قراءة رسائل الخطأ في أمر status

عند تنفيذ systemctl status، سيتم عرض حالة الخدمة بالإضافة إلى آخر رسائل السجل. على سبيل المثال:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
   Active: failed (Result: exit-code) since Fri 2025-04-18 12:00:00 JST; 5s ago
  Process: 12345 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)

من السهل أن ترى أن الخدمة فشلت (“Active: failed”)، ويمكنك أيضًا تحديد سبب الخطأ ورؤية ملف الوحدة من سطر “Loaded”.

5.3 عند توقف الخدمة تلقائيًا

إذا بدأت الخدمة لكنها توقفت مباشرةً، غالبًا ما يكون السبب واحدًا من التالي:

  • خطأ في ملف التهيئة
  • تعارض المنافذ
  • نقص الملفات أو المجلدات المطلوبة
  • نقص الصلاحيات اللازمة للتشغيل

الحلول الفعّالة تشمل:

  • مراجعة ملف التهيئة واختباره باستخدام nginx -t أو apachectl configtest
  • استخدام journalctl -u اسم_الخدمة لتتبع السجلات
  • التحقق من وجود المجلدات المطلوبة (مثل: /var/run/xxx) وإنشائها إذا لزم الأمر

5.4 عند ظهور حالة masked وعدم إمكانية بدء الخدمة

إذا ظهرت رسالة خطأ كهذه عند تنفيذ systemctl start:

Failed to start example.service: Unit example.service is masked.

هذا يعني أن الخدمة في حالة masked (أي معطلة بالكامل ولا يمكن تشغيلها). لفك الحجب استخدم:

sudo systemctl unmask اسم_الخدمة

ثم أعد محاولة بدء الخدمة.

6. الخلاصة

إدارة الخدمات في Linux هي جزء أساسي من تشغيل النظام اليومي. systemctl هو الأداة المركزية التي تسمح لك بفحص وإدارة جميع الخدمات بسهولة.

في هذه المقالة، قمنا بشرح “systemctl list” والكلمات المفتاحية ذات الصلة عبر النقاط التالية:

ما الذي يمكنك فعله باستخدام أمر systemctl؟ (مراجعة)

  • التحقق من قائمة الخدمات
  • عرض الخدمات النشطة حاليًا (list-units --type=service)
  • عرض جميع الخدمات بما في ذلك غير النشطة (--all أو --state=)
  • قائمة ملفات وحدات الخدمات وإعدادات التشغيل (list-unit-files)
  • العمليات الأساسية على الخدمات
  • بدء/إيقاف/إعادة تشغيل/التحقق من الحالة (start / stop / restart / status)
  • إعداد التشغيل التلقائي (enable / disable / is-enabled)
  • العمليات التطبيقية ومعالجة المشاكل
  • التحقق من التبعيات، عرض ملفات الوحدات، إعادة تحميل الإعدادات
  • تحليل السجلات وتحديد السبب عند حدوث الأخطاء

أفضل الممارسات لإدارة الخدمات

  • تحقق من الحالة قبل القيام بأي عملية (دائمًا استخدم status)
  • تأكد من حالة التشغيل التلقائي (is-enabled)
  • بعد تعديل الإعدادات، نفذ دائمًا daemon-reload
  • راجع السجلات باستخدام journalctl عند مواجهة المشاكل

التحقق الدقيق والمتواصل هو أساس الإدارة المستقرة والسريعة للخدمات على أنظمة Linux.

للتعلم المتقدم

إذا كنت ترغب في التعمق أكثر بعد قراءة هذه المقالة، ننصحك باستكشاف المواضيع التالية:

  • أهداف systemd (والفرق بينها وبين runlevel)
  • جدولة المهام الدورية باستخدام systemd-timer
  • إنشاء ملفات وحدات مخصصة وكيفية وضعها

7. الأسئلة الشائعة (FAQ)

في هذا القسم، نجيب على الأسئلة الأكثر شيوعًا حول أمر systemctl وقوائم الخدمات. حتى إذا كنت قد أصبحت متمرسًا في الأساسيات، يمكنك مراجعة هذا القسم.

س1. ما الفرق بين systemctl و service؟

ج1.
systemctl هو الأمر القياسي لإدارة الخدمات في الأنظمة الحديثة المعتمدة على systemd (مثل Ubuntu وCentOS وFedora).
أما service فهو أمر قديم كان يستخدم مع أنظمة SysVinit، ولا يزال متاحًا لأغراض التوافق، ولكن يُوصى باستخدام systemctl مع systemd.

س2. ما الفرق بين list-units و list-unit-files؟

ج2.

  • list-units يعرض الوحدات المحملة حاليًا (أي الخدمات النشطة أو التي سبق استخدامها).
  • list-unit-files يعرض جميع ملفات الوحدات وحالة التفعيل الخاصة بها (enabled / disabled).
    أي أن الفرق هو بين “ما يعمل الآن” و”ما هو محدد في التهيئة”.

س3. هل يمكن تشغيل خدمة بحالة static؟

ج3.
نعم، يمكنك تشغيل خدمة بحالة static يدويًا باستخدام start، لكن لا يمكنك تفعيلها تلقائيًا باستخدام enable.
وذلك لأن الخدمات بحالة static مُصممة للعمل اعتمادًا على وحدات أخرى فقط.

س4. لا أستطيع تشغيل خدمة بحالة masked، ما الحل؟

ج4.
حالة masked تعني أن الخدمة معطلة تمامًا ولا يمكن تشغيلها.
لفك الحجب، استخدم الأمر التالي:

sudo systemctl unmask اسم_الخدمة

بعد ذلك يمكنك تشغيلها باستخدام start.

س5. هل يمكن عرض حالة الخدمات باستخدام واجهة رسومية (GUI)؟

ج5.
بعض التوزيعات توفر أدوات مثل gnome-system-monitor أو KSysGuard أو Cockpit لعرض حالة الخدمات عبر واجهة رسومية.
لكن للتحكم الكامل (تفعيل/تعطيل)، يظل systemctl الخيار الأكثر قوة ودقة.

س6. أين أضع ملفات الوحدات التي أنشئها بنفسي؟

ج6.
عادةً ما يتم وضعها في /etc/systemd/system/.
بعد التعديل، لا تنس تنفيذ:

sudo systemctl daemon-reload

بعد ذلك يمكنك إدارتها بشكل طبيعي باستخدام start وenable.