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