تسجيل الدخول / التسجيل

التعامل مع Systemd بشكل صحيح

التعامل مع نظام Systemd أمر مهم جدا لكل من يستخدم لينيكس في المنزل أو في المجال المهني. هذا المقال يقدم أساسيات التعامل مع النظام بشكل سليم.

شارك هذا المقال على:

ما هو Systemd

نظام systemd هو نظام إدارة الأنظمة في لينيكس، وهو مصمم لتنظيم وإدارة العمليات والخدمات في لينيكس. تمثل systemd تطورًا هامًا في عالم إدارة النظام على لينيكس، وقد استبدلت تدريجياً نظم التشغيل التقليدية مثل init و Upstart في العديد من توزيعات لينيكس الشهيرة.

البداية:

تم تطوير systemd من قبل لينارت بوترينج وأصبح جزءًا من النواة الرئيسية للعديد من توزيعات لينيكس مثل Fedora وUbuntu وDebian وغيرها.

مزايا رئيسية:

أداء محسَّن: يُعتبر systemd أسرع من تقنيات البدء التقليدية.
تفعيل متعدد الوسائط: يدعم systemd تفعيل الوحدات بمرونة وبمجرد توافر المتطلبات.
إدارة الخدمات: يسهل إعداد وإدارة الخدمات (services) في systemd باستخدام ملفات الوحدات (unit files).
تسجيل متقدم: يوفر جهاز تسجيل (journal) متقدم يجمع ويعرض معلومات النظام بشكل منظم.
وحدات systemd: تعرَّف الخدمات والوحدات الأخرى في systemd باستخدام ملفات الوحدات (unit files)، والتي تحدد كيفية تكوين وتشغيل هذه الوحدات. على سبيل المثال:

وحدة الخدمة (service unit): تعريف خدمة تعمل في النظام.
وحدة الجهاز (device unit): تعريف جهاز مثل القرص الصلب.
وحدة الإستهداف (target unit): مجموعة من الوحدات تستخدم لتنفيذ وظائف محددة مثل البدء أو الإيقاف.
أمر systemctl: يمكن استخدام أمر systemctl لإدارة ومراقبة الخدمات والوحدات في systemd. على سبيل المثال:

systemctl start service-name: لبدء خدمة معينة.
systemctl stop service-name: لإيقاف خدمة معينة.
systemctl enable service-name: لتمكين تشغيل خدمة عند بدء التشغيل.
systemctl disable service-name: لتعطيل تشغيل خدمة عند بدء التشغيل.
systemctl status service-name: لعرض حالة خدمة معينة.
نظام systemd هو نظام إدارة الأنظمة الحديث والقوي في نظام لينيكس، وهو جزء مهم من توزيعات لينيكس الحديثة. تعتبر فهم أساسيات systemd أمرًا مهمًا لمسؤولي النظام ومطوري البرامج على لينيكس. بالإضافة لما سبق، من المهم أيضا للمستخدم العادي فهم طريقة عمل هذا النظام من أجل فهم أشمل وأفضل للنظام وطريقة عمله وكيفية التعامل مع أجزاءه المختلفة.

هل systemd سيء؟

الإجابة القصيرة، لا. الإجابة الطويلة، بالطبع لا.

لماذا إذن نسمع عن العديد من المواقع والناشرين يهاجمون systemd بشكل وحشي ويتهمونه بأسوء الأمور طوال الوقت؟ في الحقيقة هناك عدد من الإجابات على هذا الموضوع وجميعها تقتصر على حوادث تكاد تكون فردية.

بشكل عام، في حال كان لديك جهاز متناهي الصغر وموارده محدودة جدا، سيكون systemd ثقيل جدا وزائد عن الحاجة. هنا نتحدث عن الأنظمة المدمجة متناهية الصغر مثل نظام تشغيل الهاتف أو الغسالة الذكية.

في بدايات systemd قبل أكثر من 10 سنوات كانت هناك العديد من التغييرات الجذرية في طريقة تعامل الناس مع نظام التشغيل مما تسبب في موجة من الرفض وكانت قوية لأن الرفض ترافق أيضا مع عدد من المشاكل التي تسبب بها systemd. طبعا يمكن لأي عاقل أن يعلم أن هذه المشاكل تم التعامل معها في وقتها وتم حلها بشكل جذري وأن systemd اليوم أكثر نضجا من أي وقت مضى.

اليوم، ولأن هناك العديد من الناس الغير قادرين على شراء جهاز كمبيوتر حديث، نسمع بشكل متكرر شكاويهم من أن النظام ثقيل أو غير ملائم لهم وفي بعض الحالات الشاذة نراهم أيضا يقفون ضد systemd بالكامل وهاجموه كباقي مجموعات المستخدمين الذين يرون أنه الشر الأعظم في العالم. في الحقيقة هذا النوع الوحيد من المشتكين الذين لديهم سبب حقيقي للشكوى ولكن ليس للهجوم. نظام systemd جاء لحل معضلات لم يتوفر لها حل في وقتها ومهّد الطريق لمستقبل عظيم في لينيك لم يكن ممكن من دونه. ولكن هل هناك بديل لهذا الصنف من المستخدمين؟

بالتأكيد هناك. نظام systemd ليس إجباري للمستخدمين والعديد من التوزيعات تقوم بتوفير نظام تمهيد وإدارة مختلف مثل dinit الحديث العهد أو runit أو OpenRC وغيرهم العديد من الانظمة.

عرض الخدمات المتوفرة في النظام

الأمر systemctl list-unit-files هو أحد أوامر نظام systemd في نظام لينيكس ويُستخدم لعرض قائمة بجميع ملفات الوحدات المتاحة وحالتها في النظام. يوفر هذا الأمر نظرة عامة على الوحدات المتاحة وما إذا كانت مفعلة أو معطلة، ويمكن استخدامه لإدارة ومراقبة الخدمات والوحدات في نظام systemd.

الصيغة الأساسية للأمر:

systemctl list-unit-files [OPTIONS]

بعض الخيارات الشائعة المستخدمة مع هذا الأمر:

  • -t, –type=TYPE: يسمح لك بتحديد نوع الوحدة التي تريد عرضها. يمكن أن يكون النوع مثلاً service (خدمة)، socket (مأخذ)، device (جهاز)، target (هدف)، إلخ.
  • –all: يعرض جميع الوحدات بغض النظر عن حالتها.
  • –state=STATE: يسمح لك بتحديد حالة الوحدات التي تريد عرضها. يمكن أن تكون الحالات مثلاً enabled (مفعلة)، disabled (معطلة)، enabled-runtime (مفعلة أثناء التشغيل)، إلخ.

مثال على استخدام الأمر:

systemctl list-unit-files --type=service

هذا المثال سيعرض قائمة بجميع ملفات الخدمات في النظام وحالتها.

المخرجات التي ستراها تشمل اسم الوحدة، نوعها، ما إذا كانت مفعلة أو معطلة، وما إذا كانت مفعلة أثناء التشغيل (runtime) أم لا. يمكنك استخدام هذه المعلومات لفحص وإدارة الوحدات في نظام systemd بشكل أفضل، سواء كنت تريد تمكين أو تعطيل وحدة معينة أو مراقبة حالتها.

تشغيل خدمة مع بدء تشغيل النظام

أمر systemctl enable هو أحد أوامر نظام systemd في نظام لينيكس، ويُستخدم لتمكين تشغيل وحدة (unit) معينة بحيث تبدأ تلقائيًا عند بدء تشغيل النظام. هذا الأمر يُفيد في تكوين الخدمات والوحدات لتشغيلها تلقائيًا عند بدء التشغيل دون الحاجة إلى تشغيلها يدويًا في كل مرة.

الصيغة الأساسية لاستخدام الأمر systemctl enable هي:

sudo systemctl enable unit-name

sudo: يتطلب وضع sudo في بداية الأمر للحصول على صلاحيات المسؤول (root)، حيث يتطلب تمكين أو تعطيل وحدات systemd صلاحيات مسؤول.
unit-name: هو اسم الوحدة التي تريد تمكين تشغيلها. يمكن أن تكون هذه الوحدة خدمة (service) أو وحدة أخرى مثل جهاز (device) أو مأخذ (socket).
مثال على استخدام الأمر لتمكين تشغيل خدمة معينة، على سبيل المثال، خدمة “nginx” التي تعتبر خادم ويب:

sudo systemctl enable nginx

بعد تنفيذ هذا الأمر، ستقوم systemd بإضافة رابط رمزية (symlink) لملف الوحدة المعنية إلى دليل البدء التلقائي (autostart directory) في النظام. وبالتالي، ستبدأ الوحدة تلقائيًا عند بدء تشغيل النظام في المرات اللاحقة.

تعطيل تشغيل خدمة مع بدء تشغيل النظام

أمر systemctl disable هو أحد أوامر نظام systemd في نظام لينيكس، ويُستخدم لإلغاء تمكين تشغيل وحدة (unit) معينة بحيث لا تبدأ تلقائيًا عند بدء تشغيل النظام، أو تعطيل بدء خدمة في حال أنك قمت بتعينها لتعمل بشكل تلقائي مع بدء تشغيل النظام.

الصيغة الأساسية لاستخدام الأمر systemctl disable هي:

sudo systemctl disable unit-name

sudo: يتطلب وضع sudo في بداية الأمر للحصول على صلاحيات المسؤول (root)، حيث يتطلب تعطيل وحدات systemd صلاحيات مسؤول.
unit-name: هو اسم الوحدة التي تريد إلغاء تمكين تشغيلها. يمكن أن تكون هذه الوحدة خدمة (service) أو وحدة أخرى مثل جهاز (device) أو مأخذ (socket).
مثال على استخدام الأمر لإلغاء تمكين تشغيل خدمة معينة، على سبيل المثال، خدمة “nginx” التي تعتبر خادم ويب:

sudo systemctl disable nginx

بعد تنفيذ هذا الأمر، ستقوم systemd بإزالة رابط الوحدة المعنية من دليل البدء التلقائي (autostart directory) في النظام، مما يعني أن الوحدة لن تبدأ تلقائيًا عند بدء تشغيل النظام في المرات اللاحقة.

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

تشغيل خدمة بشكل يدوي

أمر systemctl start هو أحد أوامر نظام systemd في نظام لينيكس، ويُستخدم لبدء تشغيل وحدة (unit) معينة بشكل يدوي. يُفيد هذا الأمر في تشغيل خدمة أو وحدة معينة فورًا بدون الانتظار لبدء تشغيلها تلقائيًا عند بدء تشغيل النظام.

الصيغة الأساسية لاستخدام الأمر systemctl start هي:

sudo systemctl start unit-name

sudo: يتطلب وضع sudo في بداية الأمر للحصول على صلاحيات المسؤول (root)، حيث يتطلب بدء تشغيل وحدات systemd صلاحيات مسؤول.
unit-name: هو اسم الوحدة التي تريد بدء تشغيلها. يمكن أن تكون هذه الوحدة خدمة (service) أو وحدة أخرى مثل جهاز (device) أو مأخذ (socket).
مثال على استخدام الأمر systemctl start لبدء تشغيل خدمة معينة، على سبيل المثال، خدمة “nginx” التي تعتبر خادم ويب:

sudo systemctl start nginx

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

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

إيقاف خدمة بشكل يدوي

أمر systemctl stop هو أحد أوامر نظام systemd في نظام لينيكس، ويُستخدم لإيقاف تشغيل وحدة (unit) معينة بشكل يدوي. يُفيد هذا الأمر في إيقاف تشغيل خدمة أو وحدة معينة فورًا بدلاً من انتظار إيقاف تشغيلها تلقائيًا عند إيقاف تشغيل النظام.

الصيغة الأساسية لاستخدام الأمر systemctl stop هي:

sudo systemctl stop unit-name

sudo: يتطلب وضع sudo في بداية الأمر للحصول على صلاحيات المسؤول (root)، حيث يتطلب إيقاف تشغيل وحدات systemd صلاحيات مسؤول.
unit-name: هو اسم الوحدة التي تريد إيقاف تشغيلها. يمكن أن تكون هذه الوحدة خدمة (service) أو وحدة أخرى مثل جهاز (device) أو مأخذ (socket).
مثال على استخدام الأمر systemctl stop لإيقاف تشغيل خدمة معينة، على سبيل المثال، خدمة “nginx” التي تعتبر خادم ويب:

sudo systemctl stop nginx

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

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

إعادة تشغيل خدمة بشكل يدوي

أمر systemctl restart هو أحد أوامر نظام systemd في نظام لينيكس، ويُستخدم لإعادة تشغيل وحدة (unit) معينة بشكل يدوي. يُفيد هذا الأمر في إعادة تشغيل خدمة أو وحدة معينة دون الحاجة إلى إعادة تشغيل النظام بأكمله.

الصيغة الأساسية لاستخدام الأمر systemctl restart هي:

sudo systemctl restart unit-name

sudo: يتطلب وضع sudo في بداية الأمر للحصول على صلاحيات المسؤول (root)، حيث يتطلب إعادة تشغيل وحدات systemd صلاحيات مسؤول.
unit-name: هو اسم الوحدة التي تريد إعادة تشغيلها. يمكن أن تكون هذه الوحدة خدمة (service) أو وحدة أخرى مثل جهاز (device) أو مأخذ (socket).
مثال على استخدام الأمر systemctl restart لإعادة تشغيل خدمة معينة، على سبيل المثال، خدمة “nginx” التي تعتبر خادم ويب:

sudo systemctl restart nginx

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

يُفيد استخدام هذا الأمر عندما تحتاج إلى تحديث إعدادات وحدة معينة أو إعادة تشغيلها لأي سبب كان دون التأثير على بقية النظام.

فحص حالة خدمة في النظام

مر systemctl status هو أحد أوامر نظام systemd في نظام Linux، ويُستخدم لعرض معلومات حالة وحدة (unit) معينة في النظام. يمكن استخدام هذا الأمر لفحص حالة الوحدة ومعرفة ما إذا كانت تعمل بشكل صحيح أم لا، ولعرض تفاصيل حول حالتها وسجل الأحداث الخاص بها.

الصيغة الأساسية لاستخدام الأمر systemctl status هي:

sudo systemctl status unit-name

sudo: يتطلب وضع sudo في بداية الأمر للحصول على صلاحيات المسؤول (root)، حيث يمكن أن يتطلب الوصول إلى بعض معلومات الوحدات صلاحيات مسؤول.
unit-name: هو اسم الوحدة التي تريد فحص حالتها. يمكن أن تكون هذه الوحدة خدمة (service) أو وحدة أخرى مثل جهاز (device) أو مأخذ (socket).
مثال على استخدام الأمر systemctl status لعرض حالة خدمة معينة، على سبيل المثال، خدمة “nginx” التي تعتبر خادم ويب:

sudo systemctl status nginx

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

يعد أمر systemctl status أداة مفيدة لمراقبة وتشخيص حالة الخدمات والوحدات في نظام Linux والعثور على معلومات مهمة حولها.

حظر خدمة من العمل بشكل يدوي أو تلقائي

أمر systemctl mask هو أحد أوامر نظام systemd في نظام Linux، ويُستخدم لمنع وحدة (unit) معينة من التشغيل، سواء كانت خدمة (service) أو وحدة أخرى. باستخدام هذا الأمر، يتم تعطيل الوحدة تمامًا ومنعها من التشغيل حتى عند محاولة بدء تشغيلها يدويًا.

الصيغة الأساسية لاستخدام الأمر systemctl mask هي:

sudo systemctl mask unit-name

sudo: يتطلب وضع sudo في بداية الأمر للحصول على صلاحيات المسؤول (root)، حيث يتطلب منع وحدات systemd صلاحيات مسؤول.
unit-name: هو اسم الوحدة التي تريد منعها من التشغيل.
مثال على استخدام الأمر systemctl mask لمنع وحدة معينة، على سبيل المثال، خدمة “nginx” التي تعتبر خادم ويب:

sudo systemctl mask nginx

بعد تنفيذ هذا الأمر، سيتم إنشاء رمز رمزي (symlink) في مكان الوحدة في مجلد الوحدات /etc/systemd/system يشير إلى /dev/null، وهو جهاز فارغ. هذا يعني أن أي محاولة لبدء تشغيل الوحدة ستكون مشابهة للتوجيه إلى جهاز فارغ، مما يمنع تشغيلها بشكل فعّال.

يُفيد استخدام systemctl mask عندما تريد منع وحدة معينة من التشغيل بشكل دائم ومنع أي مستخدم من تمكينها. تذكر أنه إذا كنت بحاجة إلى تمكين تشغيل الوحدة مرة أخرى في المستقبل، يمكنك استخدام systemctl unmask لإلغاء التأمين عنها.

إعادة تحميل نظام systemd

أمر systemctl daemon-reload هو أحد أوامر نظام systemd في نظام Linux، ويُستخدم لإعادة تحميل تكوين نظام systemd بشكل يدوي بعد أن تم تعديل ملفات الوحدات (unit files) أو ملفات التكوين الخاصة بالخدمات.

عندما تقوم بتحرير ملف وحدة أو تعديل إعدادات خدمة، يجب عليك تشغيل systemctl daemon-reload لتحديث نظام systemd بمعلومات التكوين الجديدة. هذا الأمر يجعل systemd يعيد قراءة جميع ملفات الوحدات ويعيد بناء قاعدة بيانات الوحدات الداخلية بناءً على التغييرات التي تمت.

الصيغة الأساسية لاستخدام الأمر systemctl daemon-reload بسيطة وتبدو كالتالي:

sudo systemctl daemon-reload

sudo: يتطلب وضع sudo في بداية الأمر للحصول على صلاحيات المسؤول (root)، حيث يتطلب إعادة تحميل تكوين نظام systemd صلاحيات مسؤول.
بمجرد تنفيذ هذا الأمر، سيقوم systemd بإعادة تحميل تكوينه والتحديثات الجديدة التي تم إجراؤها على ملفات الوحدات وملفات التكوين الخاصة بالخدمات. هذا يسمح بتطبيق التغييرات والتحسينات الجديدة على نظام systemd دون الحاجة إلى إعادة تشغيل النظام بأكمله.

يُفيد استخدام systemctl daemon-reload عندما تجري تغييرات في تكوين الوحدات أو إعدادات الخدمات وترغب في تطبيق هذه التغييرات دون إعادة تشغيل النظام. على سبيل المثال، في حال قمت بتعديل قدرة المعالج أو حجم الذاكرة الأقصى المسموح للخدمة أن تستخدمه، لا يمكنك إعادة تشغيل الخدمة لتطبيق التغييرات مباشرة، بل تحتاج أولا إلى إعادة تكوين systemd ليقوم بحفظ هذه الإعدادات، ومن ثم إعادة تشغيل الخدمة حتى يتم تطبيق الحدود عليها.

الخاتمة

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

إلى أن يحين وقت التغيير، يمكنك تعلم التعامل مع نظام التمهيد والإدارة الأكبر والأكثر شهرة في لينيكس الآن حتى تتمتع بقدرة أعلى على إدارة نظامك بشكل فعّال إحترافي.

ahmad

ahmad

مؤسس لينيكس العرب ومدير منصّة بسّام للتواصل الإجتماعي

اترك تعليقاً

تواصل معنا

أحدث المقالات

تابع جديدنا

إشترك في نشرتنا الشهرية

لا نقوم بإرسال بريد مزعج، فقط المقالات الحديثة

قد ترغب أيضاً في قراءة التالي

مقالات مشابهة