من أكثر الأدوات فائدة لمستخدمي Linux، ولا سيما التوزيعات الحديثة مثل Ubuntu، هو أمر systemctl. هذه الأداة في سطر الأوامر مخصصة للتفاعل مع systemd، وهو مدير النظام والخدمات.
من خلال هذا الأمر، يمكنك إدارة خدمات النظام، ومراقبة حالتها، وتشغيلها أو إيقافها، وتفعيلها أو تعطيلها عند بدء تشغيل النظام. أداة مفيدة بحق. لكن إن لم يُتعرَّف على الأمر systemctl أو لم يُعثر عليه، فستواجه الخطأ "sudo:systemctl: command not found" .
إذاً، دعنا نتحدث عن معنى خطأ "systemctl: command not found"، والأسباب المختلفة التي قد تكون وراءه، وكيفية إصلاحه.
ماذا يعني خطأ systemctl: Command Not Found؟
ببساطة، خطأ "systemctl: command not found" يعني أن أداة سطر الأوامر systemctl غير متوفرة أو غير قابلة للوصول في البيئة الحالية. قد يرجع ذلك إلى أسباب عدة، تعود في مجملها إما إلى كون البيئة ليست بيئة نظام حقيقية، أو إلى عدم تثبيت حزمة systemd على النظام.
في الأساس، إما أن حزمة systemd غير مثبتة، أو أن توزيعة Linux أو إصدارها لا يستخدم systemd، بل يعتمد على أنظمة أقدم لإدارة الخدمات كـ init.d. احتمال آخر هو أن متغير البيئة PATH لا يتضمن المسار الذي يوجد فيه systemctl، مما يعني أن الـ shell لا يستطيع العثور عليه.
الآن بعد أن أصبح لديك تصور عما قد يسبب خطأ "systemctl: command not found" في نظامك، دعنا نستعرض كيفية تحديد موضع المشكلة وإصلاحها.
إصلاح خطأ systemctl: Command Not Found
في الخطوات التالية، سنتحقق مما إذا كان نظامك يحتوي على systemd مثبتاً ويستخدم systemctl أم لا، وسنتحقق أيضاً من مسار systemctl. بعد تحديد المشكلة، سنتخذ الخطوات اللازمة لإصلاح الخطأ.
١. التحقق مما إذا كان نظامك يستخدم systemd
بما أن systemctl لا يمكن استخدامه إلا إذا كانت حزمة systemd مثبتة، سنبدأ بالتحقق مما إذا كان نظامك من المفترض أن يستخدم systemd، وذلك بتشغيل الأمر التالي:
ps -p 1 -o comm=
أو يمكنك التحقق من إصدار systemd بالأمر التالي:
systemd --version
إذا كان الناتج هو systemd، فهذا يعني أن systemd هو نظام الـ init لديك وينبغي أن يكون Ubuntu systemctl مثبتاً. أما إذا كان الناتج هو init أو أي مدير عمليات آخر، فهذا يعني أن نظامك يستخدم نظام تهيئة بديلاً، ولن يعمل systemctl ما لم تنتقل إلى systemd.
إذا رأيت أنظمة تهيئة قديمة كـ Upstart أو SysVinit وتريد التبديل إلى systemd لاستخدام systemctl، اتبع الخطوات التالية:
١. ثبّت systemctl عن طريق تثبيت systemd باستخدام الأمر التالي:
sudo apt install systemd-sysv
٢. أعد تشغيل النظام بتشغيل هذا الأمر:
sudo reboot
٣. تحقق من أن نظامك يستخدم systemd الآن:
ps -p 1 -o comm=
يجب أن يكون الناتج الآن هو systemd.
٢. التأكد من تثبيت systemd بشكل صحيح
في الحالات الاعتيادية، حين يكون systemd مثبتاً ويعمل كنظام init، يجب أن يعمل أمر systemctl بشكل صحيح. إن لم يكن كذلك، فهذا يعني أن حزمة systemd إما مفقودة أو مثبتة بشكل غير صحيح.
تجدر الإشارة إلى أنك إذا كنت تستخدم إصداراً مخففاً من Ubuntu، كحاوية Docker أو نسخة سحابية، فقد لا يكون systemd مثبتاً بشكل افتراضي. لتثبيت systemctl عن طريق تثبيت systemd، شغّل الأوامر التالية:
sudo apt update sudo apt install systemd
بعد التثبيت، تحقق مما إذا كان أمر systemctl متاحاً.
٣. التحقق من PATH الخاص بـ systemctl
من المشكلات الشائعة المتعلقة بخطأ systemctl not found أن systemctl قد يكون مثبتاً لكنه غير موجود في PATH الخاص بنظامك. للتحقق من وجود ملفات systemd الثنائية في المسارات المعتادة كـ /bin أو /usr/bin أو /usr/local/bin، يمكنك استخدام الأمر التالي:
which systemctl
إذا عُثر على systemctl في أحد المسارات المدرجة في PATH، ستحصل على ناتج كالتالي:
/usr/bin/systemctl
إذا لم يُعثر على systemctl في أيٍّ من المسارات الموجودة في PATH، فلن يُعيد أمر which أي نتيجة.
غير أن systemctl قد لا يعمل في بعض الأحيان حتى لو عُثر عليه في مساراتك. سبب ذلك أن systemctl قد يكون موجوداً في مسار غير مدرج في PATH. في هذه الحالة، ستحتاج إلى التحقق مما إذا كان المسار الذي يوجد فيه systemctl مضمّناً في نظامك، باستخدام الأمر التالي:
echo $PATH
يجب أن يبدو الناتج كما يلي:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
الآن، كل ما عليك فعله هو التحقق مما إذا كان المجلد الذي يوجد فيه systemctl (والذي حصلت عليه من أمر which) مُدرجاً ضمن المجلدات الظاهرة في ناتج الأمر echo $PATH.
إذا لم يكن مجلد systemctl مُدرجاً في ناتج echo $PATH، فستحتاج إلى إضافته إلى متغير PATH. للقيام بذلك، نفّذ الأمر التالي:
لـ مستخدمو Bash shell، افتح ملف ~/.bashrc في محرر نصوص:
nano ~/.bashrc
أضف السطر التالي في نهاية الملف:
export PATH=$PATH:/usr/bin
/usr/bin هو المجلد النموذجي الذي يتواجد فيه systemctl في هذا المثال.
الآن، احفظ الملف وأغلقه بالضغط على CTRL + X، ثم Y للتأكيد، ثم Enter للحفظ.
لـ مستخدمو Zsh، افتح ملف ~/.zshrc في محرر نصوص:
nano ~/.zshrc
أضف السطر التالي في نهاية الملف:
export PATH=$PATH:/usr/bin
/usr/bin هو المجلد النموذجي الذي يتواجد فيه systemctl في هذا المثال.
الآن، احفظ الملف وأغلقه بالضغط على CTRL + X، ثم Y للتأكيد، ثم Enter للحفظ.
بعد إتمام الخطوات أعلاه، استخدم الأمر echo $PATH للتحقق من أن مجلد systemctl قد أُضيف إلى PATH. ينبغي الآن أن تتمكن من تشغيل systemctl دون مواجهة خطأ "systemctl: command not found".
4. إعادة تثبيت systemd
إذا لم تُجدِ الحلول السابقة نفعاً ولا تزال تواجه خطأ "command not found"، فقد يحل إعادة تثبيت systemd بالكامل المشكلةَ. للقيام بذلك، نفّذ الأوامر التالية:
sudo apt purge systemd sudo apt install systemd
ثم أعد تشغيل النظام بهذا الأمر:
sudo reboot
تحقق مما إذا كان systemctl يعمل بشكل صحيح.
5. التحقق من صحة إعداد systemd
أحياناً، قد تكون المشكلة بسيطة كتثبيت systemd بإعدادات خاطئة، مما يؤدي إلى ظهور خطأ "systemctl: command not found". كل ما عليك فعله لحل هذه المشكلة هو تنفيذ الأمر التالي، وستنتهي المسألة:
sudo dpkg-reconfigure systemd
6. إصدار قديم من Windows Subsystem for Linux (WSL)
في حال كنت تستخدم Ubuntu على WSL (نظام Windows الفرعي لـ Linux) تجدر الإشارة إلى أن الإصدارات القديمة من WSL، كـ WSL 1، لا تدعم systemctl بشكل أصلي، لذا بصرف النظر عن أيٍّ من الحلول السابقة التي تستخدمها، لن تتمكن من تشغيل systemctl.
إذا أردت استخدام وظائف systemctl، فستحتاج إلى الترقية إلى WSL 2 الذي يوفر دعماً أفضل لـ systemd. إذا لم تكن متأكداً مما إذا كنت تستخدم WSL أم لا، يمكنك التحقق من ذلك بتنفيذ الأمر التالي:
uname -a
إذا ذكر الناتج WSL، فهذا هو سبب ظهور خطأ "systemctl: command not found".
7. استخدام sudo service بديلاً عن systemctl
إذا كنت تواجه خطأ "systemctl: command not found" لأن نظامك لا يستخدم systemd، يمكنك استخدام الأمر sudo service لإدارة الخدمات. يعمل هذا الأمر مع أنظمة init القديمة مثل SysVinit أو Upstart. وهو مفيد لأنظمة Ubuntu التي تعتمد على سكريبتات init بدلاً من systemd.
على سبيل المثال، لتشغيل خدمة ما، نفّذ الأمر التالي:
sudo service <service_name> start
الخاتمة
حلّ systemd وأداة سطر الأوامر systemctl محلّ معظم أنظمة init القديمة، كـ SysVinit وUpstart. وعلى الرغم من أن systemd لا يحظى بقبول الجميع بسبب تصميمه الأحادي وابتعاده عن فلسفة Unix، إلا أنه لا يزال الخيار السائد في معظم الأنظمة. نأمل أن تكون قد تمكّنت من حلّ خطأ عدم إتاحة أمر systemctl، إذ إن تعذّر استخدام أداة سطر الأوامر الخاصة بـ systemd يُقيّد قدراته تقييدًا شديدًا.
الأسئلة الشائعة
ما هو systemctl وماذا يعني خطأ "systemctl: command not found"؟
systemctl هي أداة سطر أوامر تُستخدم لإدارة الخدمات في أنظمة Linux التي تعمل بـ systemd، مثل Ubuntu. يظهر خطأ "systemctl: command not found" حين لا تكون الأداة متاحة أو يتعذّر الوصول إليها، وغالبًا ما يكون ذلك لأن النظام لا يستخدم systemd أو لأن حزمة systemd غير مثبّتة.
هل systemctl متاح في جميع إصدارات Ubuntu؟
لا، systemctl غير متاح في جميع إصدارات Ubuntu. فـ systemctl جزء من نظام init المسمى systemd، وهو النظام الافتراضي في معظم إصدارات Ubuntu الحديثة (اعتبارًا من الإصدار 15.04). أما الإصدارات الأقدم أو بعض عمليات التثبيت الدنيا، فقد تستخدم أنظمة init بديلة كـ SysVinit أو Upstart.