مشاكل بدء الخدمات بعد إعادة التشغيل
تشخيص وإصلاح مشاكل بدء الخدمات بعد إعادة تشغيل الخادم: systemctl، الخدمات الفاشلة، تحليل سجلات الإقلاع وتكوين systemd.
جدول المحتويات
مقدمة
بعد إعادة تشغيل الخادم، قد لا تبدأ بعض الخدمات تلقائيًا، مما يسبب توقفًا وانقطاعًا في الخدمة. يغطي هذا الدليل كيفية تشخيص وإصلاح مشاكل بدء الخدمات بعد إعادة التشغيل.
فحص الخدمات الفاشلة
# قائمة جميع الخدمات الفاشلة
sudo systemctl list-units --type=service --state=failed
# فحص حالة خدمة محددة
sudo systemctl status اسم_الخدمة
# عرض جميع الخدمات وحالاتها
sudo systemctl list-units --type=service --all
قراءة سجلات الإقلاع
# عرض سجلات الإقلاع الحالية
journalctl -b
# عرض سجلات الإقلاع السابقة
journalctl -b -1
# التصفية حسب الخدمة
journalctl -b -u اسم_الخدمة
# عرض الأخطاء فقط
journalctl -b -p err
# تحليل وقت الإقلاع
systemd-analyze
# ترتيب بدء الخدمات
systemd-analyze blame
# السلسلة الحرجة
systemd-analyze critical-chain
systemd-analyze blame يُظهر أي الخدمات استغرقت أطول وقت للبدء. هذا يساعد في تحديد الاختناقات في عملية الإقلاع.
تمكين الخدمات للبدء التلقائي
# تمكين الخدمة عند الإقلاع
sudo systemctl enable اسم_الخدمة
# تمكين وبدء فورًا
sudo systemctl enable --now اسم_الخدمة
# التحقق مما إذا كانت الخدمة ممكّنة
systemctl is-enabled اسم_الخدمة
# قائمة جميع الخدمات الممكّنة
systemctl list-unit-files --type=service --state=enabled
الخدمات الشائعة للتمكين
sudo systemctl enable ssh
sudo systemctl enable nginx
sudo systemctl enable apache2
sudo systemctl enable mysql
sudo systemctl enable docker
sudo systemctl enable fail2ban
تبعيات الخدمات
# عرض تبعيات الخدمة
systemctl list-dependencies اسم_الخدمة
# التبعيات العكسية
systemctl list-dependencies --reverse اسم_الخدمة
# عرض ملف وحدة الخدمة
systemctl cat اسم_الخدمة
تكوين التبعيات في ملفات الوحدة
[Unit]
Description=تطبيقي
After=network.target mysql.service
Requires=mysql.service
Wants=redis.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/start.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
التوجيهات الرئيسية:
- After=: البدء بعد هذه الوحدات
- Requires=: تبعية صارمة
- Wants=: تبعية مرنة
- Before=: البدء قبل هذه الوحدات
تحليل ترتيب الإقلاع
systemd-analyze time
systemd-analyze blame | head -20
systemd-analyze critical-chain
systemd-analyze plot > boot-chart.svg
إذا كان وقت الإقلاع طويلاً جدًا، فكر في تعطيل الخدمات غير الضرورية بأمر sudo systemctl disable اسم_الخدمة.
إنشاء خدمة systemd مخصصة
# /etc/systemd/system/myapp.service
[Unit]
Description=تطبيق مخصص
After=network.target
[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/bin/start
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
sudo systemctl status myapp
استكشاف المشاكل الشائعة
الخدمة تفشل برمز خروج
journalctl -u اسم_الخدمة -n 50 --no-pager
systemctl cat اسم_الخدمة
ls -la /المسار/إلى/الملف
الخدمة تبدأ مبكرًا جدًا
[Unit]
After=network-online.target
Wants=network-online.target
الخدمة تعيد التشغيل باستمرار
systemctl show اسم_الخدمة -p NRestarts
journalctl -u اسم_الخدمة --since "5 minutes ago"
sudo systemctl stop اسم_الخدمة
sudo systemctl reset-failed اسم_الخدمة
الخلاصة
مشاكل بدء الخدمات بعد إعادة التشغيل شائعة لكن يمكن منعها بسهولة. تأكد من تمكين الخدمات الحرجة بأمر systemctl enable، واضبط التبعيات الصحيحة في ملفات الوحدة، وتحقق بانتظام من سجلات الإقلاع بحثًا عن أخطاء.
مقالات ذات صلة
مشكلة اتصال SSH: لا يمكن الاتصال بالخادم — الحل
دليل حل مشاكل اتصال SSH: قواعد جدار حماية Path.net، Default Block، إنشاء قاعدة تصفية لمنفذ SSH وخطوات استكشاف الأخطاء وإصلاحها.
مشكلة اتصال RDP: لا يمكن الاتصال بـ Windows Server
دليل حل مشاكل اتصال RDP: قواعد جدار حماية Path.net، Default Block، إنشاء قاعدة تصفية لمنفذ RDP وخطوات استكشاف الأخطاء وإصلاحها.
كيفية إجراء اختبار MTR وإرسال النتائج للدعم
دليل اختبار الشبكة باستخدام WinMTR وLinux MTR، إنشاء قاعدة فلترة ICMP وإرسال النتائج لفريق الدعم. تشخيص فقدان الحزم والتأخير في الشبكة.