الرئيسية قاعدة المعرفة البرمجة والمنطق الخدمات و systemd: تشغيل برامجك تلقائياً عند الإقلاع
البرمجة والمنطق

الخدمات و systemd: تشغيل برامجك تلقائياً عند الإقلاع

ما هي الخدمة ولماذا تحتاجها؟

الخدمة (Service) هي برنامج يعمل في الخلفية باستمرار. في البيئات الصناعية، تطبيقات المراقبة يجب أن تعمل 24/7 وتُعاد تلقائياً عند حدوث عطل.

أمثلة: تطبيق مراقبة المستشعرات، خادم Modbus TCP، خدمة النسخ الاحتياطي، خادم لوحة المراقبة.

systemd هو مدير الخدمات في Linux الحديث: يبدأ الخدمات عند الإقلاع، يراقبها ويعيد تشغيلها، ويسجل المخرجات.

إدارة الخدمات: systemctl start و stop و enable

sudo systemctl start nginx           # بدء خدمة
sudo systemctl stop nginx            # إيقاف
sudo systemctl restart nginx         # إعادة تشغيل
sudo systemctl reload nginx          # إعادة تحميل الإعدادات (بدون توقف)

systemctl status nginx               # الحالة التفصيلية
systemctl is-active nginx            # هل تعمل؟
systemctl is-enabled nginx           # هل تبدأ تلقائياً؟

sudo systemctl enable nginx          # تفعيل البدء التلقائي
sudo systemctl disable nginx         # تعطيله
sudo systemctl enable --now nginx    # تفعيل + بدء فوري

systemctl list-units --type=service  # الخدمات النشطة
systemctl --failed                   # الخدمات المتعطلة

قراءة السجلات: journalctl

journalctl -u nginx                       # سجلات خدمة محددة
journalctl -u nginx --since "1 hour ago"  # آخر ساعة
journalctl -u nginx -f                    # متابعة مباشرة
journalctl -u monitor_app -p err          # الأخطاء فقط
journalctl -u monitor_app -n 50           # آخر 50 سطراً

# فترة زمنية
journalctl --since "2026-04-15 08:00" --until "2026-04-15 12:00"

journalctl -b                             # سجلات الإقلاع الحالي
journalctl -b -1                          # الإقلاع السابق

journalctl --disk-usage                   # المساحة المستخدمة
sudo journalctl --vacuum-size=500M        # تحديد الحجم

كتابة ملف خدمة .service مخصص

ملفات الخدمة توضع في /etc/systemd/system/:

[Unit]
Description=تطبيق مراقبة المستشعرات الصناعية
After=network.target surrealdb.service

[Service]
Type=simple
User=scada
Group=operators
WorkingDirectory=/opt/monitor_app
ExecStart=/opt/monitor_app/bin/monitor_app --config /etc/scada/monitor.toml
Restart=always
RestartSec=5
Environment=RUST_LOG=info

[Install]
WantedBy=multi-user.target
  • [Unit]: وصف الخدمة وتبعياتها
  • [Service]: كيفية التشغيل وسلوك إعادة التشغيل
  • [Install]: متى تبدأ (multi-user.target = بعد الإقلاع)
sudo systemctl daemon-reload              # تحديث بعد إضافة ملف جديد
sudo systemctl enable --now monitor_app   # تفعيل وبدء

المؤقتات: systemd timers بديل cron الحديث

ملف الخدمة /etc/systemd/system/backup-db.service:

[Unit]
Description=نسخ احتياطي لقاعدة البيانات

[Service]
Type=oneshot
User=scada
ExecStart=/opt/scripts/backup_database.sh

ملف المؤقت /etc/systemd/system/backup-db.timer:

[Unit]
Description=تشغيل النسخ الاحتياطي يومياً

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true

[Install]
WantedBy=timers.target
sudo systemctl enable --now backup-db.timer
systemctl list-timers                     # كل المؤقتات النشطة

صيغ OnCalendar: hourly، daily، *-*-* 06,18:00:00 (مرتين يومياً)، Mon *-*-* 09:00:00 (كل إثنين).

مثال عملي: إنشاء خدمة لتطبيق مراقبة Rust يعمل 24/7

# 1. إنشاء ملف الخدمة
sudo tee /etc/systemd/system/dr-monitor.service << 'EOF'
[Unit]
Description=Dr.Machine Industrial Monitor
After=network-online.target

[Service]
Type=simple
User=scada
WorkingDirectory=/opt/dr-monitor
ExecStart=/opt/dr-monitor/bin/dr-monitor
Restart=always
RestartSec=10
StartLimitBurst=5
Environment=RUST_LOG=info
Environment=DB_URL=ws://localhost:8000

[Install]
WantedBy=multi-user.target
EOF

# 2. تفعيل وبدء
sudo systemctl daemon-reload
sudo systemctl enable --now dr-monitor

# 3. التحقق والمراقبة
systemctl status dr-monitor
journalctl -u dr-monitor -f

الخلاصة

تعلمت في هذا الدرس إدارة الخدمات بـ systemctl، قراءة السجلات بـ journalctl، كتابة ملفات خدمة مخصصة، وإنشاء مؤقتات. هذه المهارات أساسية لتشغيل تطبيقات المراقبة الصناعية بشكل موثوق مع إعادة تشغيل تلقائية عند أي عطل.

systemd systemctl journalctl service daemon boot الخدمات التشغيل التلقائي الإقلاع السجلات إعادة التشغيل الخلفية