تكوين إعادة التشغيل التلقائي للخدمات مع systemd
تكوين إعادة التشغيل التلقائي للخدمات مع systemd للتعافي من الأعطال وفحوصات الصحة والمراقبة في بيئات الإنتاج.
جدول المحتويات
مقدمة
في بيئات الإنتاج، من الحتمي أن تتعطل الخدمات بشكل غير متوقع. آليات إعادة التشغيل التلقائي المُهيأة بشكل صحيح تقلل وقت التوقف وتحسن موثوقية النظام.
الخطوة 1: فحص حالة الخدمة الحالية
# حالة الخدمة
systemctl status service_name
# سجلات الخدمة
journalctl -u service_name -n 50
# عدد مرات إعادة التشغيل
systemctl show service_name | grep NRestarts
# جميع الخدمات الفاشلة
systemctl --failed
الخطوة 2: تكوين إعادة التشغيل التلقائي مع systemd
[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 | إعادة التشغيل عند الخروج غير الطبيعي |
# إعادة التحميل والتشغيل
sudo systemctl daemon-reload
sudo systemctl enable service_name
sudo systemctl start service_name
الخطوة 3: التكوين المتقدم
[Service]
Restart=on-failure
RestartSec=10
# إيقاف إذا فشل أكثر من 5 مرات في 5 دقائق
StartLimitIntervalSec=300
StartLimitBurst=5
# حد الذاكرة
MemoryMax=512M
الخطوة 4: تكوينات خاصة بالتطبيقات
تطبيق Node.js
[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
# docker-compose.yml
services:
app:
image: myapp
restart: unless-stopped
الخطوة 5: استكشاف الأخطاء وإصلاحها
# لماذا لا تبدأ الخدمة؟
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.
مقالات ذات صلة
مشكلة اتصال SSH: لا يمكن الاتصال بالخادم — الحل
دليل حل مشاكل اتصال SSH: قواعد جدار حماية Path.net، Default Block، إنشاء قاعدة تصفية لمنفذ SSH وخطوات استكشاف الأخطاء وإصلاحها.
مشكلة اتصال RDP: لا يمكن الاتصال بـ Windows Server
دليل حل مشاكل اتصال RDP: قواعد جدار حماية Path.net، Default Block، إنشاء قاعدة تصفية لمنفذ RDP وخطوات استكشاف الأخطاء وإصلاحها.
كيفية إجراء اختبار MTR وإرسال النتائج للدعم
دليل اختبار الشبكة باستخدام WinMTR وLinux MTR، إنشاء قاعدة فلترة ICMP وإرسال النتائج لفريق الدعم. تشخيص فقدان الحزم والتأخير في الشبكة.