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

مشاكل بدء الخدمات بعد إعادة التشغيل

تشخيص وإصلاح مشاكل بدء الخدمات بعد إعادة تشغيل الخادم: systemctl، الخدمات الفاشلة، تحليل سجلات الإقلاع وتكوين systemd.

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

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

مقدمة

بعد إعادة تشغيل الخادم، قد لا تبدأ بعض الخدمات تلقائيًا، مما يسبب توقفًا وانقطاعًا في الخدمة. يغطي هذا الدليل كيفية تشخيص وإصلاح مشاكل بدء الخدمات بعد إعادة التشغيل.

فحص الخدمات الفاشلة

hljs bash
# قائمة جميع الخدمات الفاشلة
sudo systemctl list-units --type=service --state=failed

# فحص حالة خدمة محددة
sudo systemctl status اسم_الخدمة

# عرض جميع الخدمات وحالاتها
sudo systemctl list-units --type=service --all

قراءة سجلات الإقلاع

hljs bash
# عرض سجلات الإقلاع الحالية
journalctl -b

# عرض سجلات الإقلاع السابقة
journalctl -b -1

# التصفية حسب الخدمة
journalctl -b -u اسم_الخدمة

# عرض الأخطاء فقط
journalctl -b -p err

# تحليل وقت الإقلاع
systemd-analyze

# ترتيب بدء الخدمات
systemd-analyze blame

# السلسلة الحرجة
systemd-analyze critical-chain

systemd-analyze blame يُظهر أي الخدمات استغرقت أطول وقت للبدء. هذا يساعد في تحديد الاختناقات في عملية الإقلاع.

تمكين الخدمات للبدء التلقائي

hljs bash
# تمكين الخدمة عند الإقلاع
sudo systemctl enable اسم_الخدمة

# تمكين وبدء فورًا
sudo systemctl enable --now اسم_الخدمة

# التحقق مما إذا كانت الخدمة ممكّنة
systemctl is-enabled اسم_الخدمة

# قائمة جميع الخدمات الممكّنة
systemctl list-unit-files --type=service --state=enabled

الخدمات الشائعة للتمكين

hljs bash
sudo systemctl enable ssh
sudo systemctl enable nginx
sudo systemctl enable apache2
sudo systemctl enable mysql
sudo systemctl enable docker
sudo systemctl enable fail2ban

تبعيات الخدمات

hljs bash
# عرض تبعيات الخدمة
systemctl list-dependencies اسم_الخدمة

# التبعيات العكسية
systemctl list-dependencies --reverse اسم_الخدمة

# عرض ملف وحدة الخدمة
systemctl cat اسم_الخدمة

تكوين التبعيات في ملفات الوحدة

hljs ini
[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=: البدء قبل هذه الوحدات

تحليل ترتيب الإقلاع

hljs bash
systemd-analyze time
systemd-analyze blame | head -20
systemd-analyze critical-chain
systemd-analyze plot > boot-chart.svg

إذا كان وقت الإقلاع طويلاً جدًا، فكر في تعطيل الخدمات غير الضرورية بأمر sudo systemctl disable اسم_الخدمة.

إنشاء خدمة systemd مخصصة

hljs ini
# /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
hljs bash
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
sudo systemctl status myapp

استكشاف المشاكل الشائعة

الخدمة تفشل برمز خروج

hljs bash
journalctl -u اسم_الخدمة -n 50 --no-pager
systemctl cat اسم_الخدمة
ls -la /المسار/إلى/الملف

الخدمة تبدأ مبكرًا جدًا

hljs ini
[Unit]
After=network-online.target
Wants=network-online.target

الخدمة تعيد التشغيل باستمرار

hljs bash
systemctl show اسم_الخدمة -p NRestarts
journalctl -u اسم_الخدمة --since "5 minutes ago"
sudo systemctl stop اسم_الخدمة
sudo systemctl reset-failed اسم_الخدمة

الخلاصة

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