انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

تكوين إعادة التشغيل التلقائي للخدمات مع systemd

تكوين إعادة التشغيل التلقائي للخدمات مع systemd للتعافي من الأعطال وفحوصات الصحة والمراقبة في بيئات الإنتاج.

وقت القراءة: 11 دقيقة استكشاف الأخطاء وإصلاحها
systemdخدمةإعادة تشغيل تلقائيwatchdoglinuxuptimeموثوقية

جدول المحتويات

مقدمة

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

الخطوة 1: فحص حالة الخدمة الحالية

hljs bash
# حالة الخدمة
systemctl status service_name

# سجلات الخدمة
journalctl -u service_name -n 50

# عدد مرات إعادة التشغيل
systemctl show service_name | grep NRestarts

# جميع الخدمات الفاشلة
systemctl --failed

الخطوة 2: تكوين إعادة التشغيل التلقائي مع systemd

hljs ini
[Unit]
Description=خدمتي
After=network.target

[Service]
Type=simple
User=www-data
ExecStart=/usr/bin/myapp
Restart=always
RestartSec=5
StartLimitIntervalSec=60
StartLimitBurst=5

[Install]
WantedBy=multi-user.target

خيارات إعادة التشغيل

الخيارالوصف
Restart=noبدون إعادة تشغيل تلقائي (افتراضي)
Restart=alwaysإعادة التشغيل في جميع الحالات
Restart=on-failureإعادة التشغيل عند الفشل فقط
Restart=on-abnormalإعادة التشغيل عند الخروج غير الطبيعي
hljs bash
# إعادة التحميل والتشغيل
sudo systemctl daemon-reload
sudo systemctl enable service_name
sudo systemctl start service_name

الخطوة 3: التكوين المتقدم

hljs ini
[Service]
Restart=on-failure
RestartSec=10
# إيقاف إذا فشل أكثر من 5 مرات في 5 دقائق
StartLimitIntervalSec=300
StartLimitBurst=5
# حد الذاكرة
MemoryMax=512M

الخطوة 4: تكوينات خاصة بالتطبيقات

تطبيق Node.js

hljs ini
[Unit]
Description=تطبيق Node.js الخاص بي
After=network.target

[Service]
Type=simple
User=nodeuser
WorkingDirectory=/var/www/app
ExecStart=/usr/bin/node /var/www/app/index.js
Restart=always
RestartSec=5
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

حاوية Docker

hljs yaml
# docker-compose.yml
services:
  app:
    image: myapp
    restart: unless-stopped

الخطوة 5: استكشاف الأخطاء وإصلاحها

hljs bash
# لماذا لا تبدأ الخدمة؟
journalctl -u service_name -n 100 --no-pager

# إعادة تعيين عداد الفشل
systemctl reset-failed service_name

عند الوصول إلى StartLimitBurst، يتوقف systemd عن إعادة التشغيل التلقائي. استخدم systemctl reset-failed service_name لإعادة تعيين العداد.

الخلاصة

تكوين إعادة التشغيل التلقائي مع systemd يحسن بشكل كبير موثوقية الخدمات في الإنتاج. استخدم Restart=always أو Restart=on-failure للتكوين الأساسي، وحدد فترة إعادة التشغيل مع RestartSec، وامنع الحلقات اللانهائية مع StartLimitBurst.