في نظام Linux، تلعب الخدمات (المعروفة أيضًا بـ الشياطين) دورًا حيويًا في التعامل مع مهام مختلفة مثل استضافة الويب، إدارة قواعد البيانات، والشبكات. ومع ذلك، قد تتوقف الخدمات أحيانًا أو تتوقف بسبب الأخطاء، استهلاك الموارد العالي، أو فشل النظام غير المتوقع.
لمنع توقف الخدمة وضمان سير العمل بسلاسة، يمكن لمسؤولي النظام تكوين الخدمات لإعادة التشغيل تلقائيًا كلما فشلت، وهو ما يكون مفيدًا بشكل خاص لخوادم الويب (Apache، Nginx)، قواعد البيانات (MySQL، PostgreSQL)، أو التطبيقات الحيوية الأخرى التي يجب أن تكون متاحة في جميع الأوقات.
في هذا الدليل، سنشرح كيفية استخدام systemd لتكوين خدمة Linux لإعادة التشغيل تلقائيًا في حال توقفها.
لماذا إعادة تشغيل الخدمة تلقائيًا؟
هناك عدة أسباب قد تدفعك لإعادة تشغيل خدمة بشكل تلقائي في نظام Linux:
- تقليل فترة التوقف: إذا توقفت الخدمة بشكل غير متوقع، فإن إعادة التشغيل التلقائية تضمن تجربة مستخدمين تعرضهم لأقل اضطراب.
- تحسين الموثوقية: الخدمات مثل خوادم الويب، قواعد البيانات، والعمليات الخلفية يجب أن تكون معملة دائمًا.
- تقليل العمل اليدوي: بدون الأتمتة، ستحتاج إلى التحقق من الخدمات بشكل متكرر وإعادة تشغيلها يدويًا إذا فشلت.
- التعامل مع الفشل غير المتوقع: إذا تعطل خدمة بسبب أخطاء برمجية أو حدود موارد أو أخطاء في النظام، يمكن لـ systemd إعادة تشغيلها دون تدخل من المسؤولين.
الآن، دعنا نمر بالخطوات لإعداد إعادة التشغيل التلقائي باستخدام systemd.
الخطوة 1: تحديد الخدمة التي ترغب في إعادة تشغيلها
قبل إجراء التغييرات، تحتاج إلى معرفة الاسم الدقيق للخدمة التي تريد تكوينها عن طريق عرض جميع الخدمات التي تعمل.
systemctl list-units --type=service --state=running

إذا كنت تعرف بالفعل اسم الخدمة، يمكنك التحقق من حالتها.
systemctl status apache2

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

الخطوة 3: إضافة تكوين إعادة تشغيل Systemd
في المحرر، أضف الأسطر التالية.
[Service] Restart=always RestartSec=5s
شرح هذه الإعدادات:
Restart=always
– يضمن إعادة تشغيل الخدمة كلما توقفت، بغض النظر عن السبب.RestartSec=5s
– يوجه النظام systemd للانتظار لمدة 5 ثوانٍ قبل إعادة تشغيل الخدمة، مما يمكن أن يمنع حدوث حلقات إعادة تشغيل سريعة في حالة الفشل المتكرر.
بعد إضافة هذه الإعدادات، قم بحفظ الملف وإغلاقه.

بعد إجراء التغييرات على خدمة systemd، يجب عليك إعادة تحميل systemd وإعادة تشغيل الخدمة لضمان تطبيق التكوين الجديد:
sudo systemctl daemon-reload sudo systemctl restart apache2
لتأكيد أن الخدمة تم إعدادها الآن لإعادة التشغيل تلقائيًا، قم بتشغيل:
sudo systemctl show apache2 | grep Restart
إذا تم تكوين كل شيء بشكل صحيح، يجب أن ترى:
Restart=always
الخطوة 4: اختبار إعادة التشغيل التلقائي في Linux
للتأكد من أن التكوين يعمل، يمكنك إيقاف الخدمة يدويًا والتحقق مما إذا كانت ستُعاد تشغيلها.
sudo systemctl stop apache2
انتظر لمدة 5 ثوانٍ، ثم تحقق من حالتها.
sudo systemctl status apache2
إذا كانت الخدمة تعمل مرة أخرى، فهذا يعني أن إعادة التشغيل التلقائي تعمل!
خيارات إعادة التشغيل الإضافية
بناءً على احتياجاتك، يوفر systemd سياسات إعادة تشغيل مختلفة:
Restart=always
– تعيد الخدمة التشغيل دائمًا، حتى إذا تم إيقافها يدويًا.Restart=on-failure
– تعيد التشغيل فقط إذا كانت الخدمة تخرج مع خطأ (ولكن ليس إذا تم إيقافها يدويًا).Restart=on-abnormal
– تعيد تشغيل الخدمة إذا تعطلت بسبب إشارة (مثل خطأ تقسيم الذاكرة).Restart=on-watchdog
– تعيد تشغيل الخدمة إذا انتهت المهلة أثناء التشغيل.
يمكنك استبدال Restart=always
بأي من هذه الخيارات وفقًا لاحتياجاتك.
كيفية التحقق من سجلات الخدمة للكشف عن المشاكل
إذا استمرت الخدمة في الفشل ، فمن الجيد التحقق من السجلات باستخدام أمر journalctl ، الذي سيعرض سجلات الخدمة منذ الـ 10 دقائق الماضية.
journalctl -u apache2 --since "10 minutes ago"
للحصول على سجل تدفقي في الوقت الحقيقي ، استخدم:
journalctl -u apache2 -f
الاستنتاج
إعداد إعادة التشغيل التلقائي للخدمات الفاشلة يضمن استمرار تشغيل التطبيقات الحرجة دون تدخل يدوي. من خلال استخدام خيارات إعادة تشغيل systemd ، يمكنك تقليل فترة التوقف ، وتحسين استقرار النظام ، وتقليل الحاجة إلى إجراءات استكشاف الأخطاء يدويًا.
Source:
https://www.tecmint.com/automatically-restart-service-linux/