تشغيل أي ملف قابل للتنفيذ كخدمة في لينكس

تشغيل أي ملف قابل للتنفيذ كخدمة لينكس

Page content

هنا مجموعة من التعليمات حول
كيفية تكوين تشغيل أي برنامج قابل للتنفيذ كخدمة في لينكس باستخدام systemd.

linux cogs الصورة أعلاه هي صورة مُولدة بواسطة الذكاء الاصطناعي (باستخدام نموذج Flux 1 dev) تمثل العجلات التي ترمز إلى النهج اليدوي في لينكس.

systemd

systemd هو أداة لإدارة النظام والخدمات وتشغيلها في بعض توزيعات لينكس.

بعض التوزيعات الشائعة التي تستخدم systemd:

  • Ubuntu 16.04 أو أحدث
  • Debian Jessie أو أحدث
  • Arch Linux
  • CentOS 7 / RHEL 7 أو أحدث
  • Fedora 15 أو أحدث

systemctl

systemctl هو أداة سطر الأوامر لتحكم في systemd.

قائمة جميع الخدمات

للحصول على قائمة جميع الخدمات، قم بتشغيل الأمر التالي:

systemctl list-units --type=service

إنشاء ملف خدمة

انتقل إلى دليل systemd للخدمات وإنشاء ملف جديد بامتداد .service:

sudo nano /etc/systemd/system/your_service_name.service

قم بتكوين ملف الخدمة:

أضف المحتوى التالي إلى الملف، مع تعديل القيم حسب الحاجة:

[Unit]
Description=وصف خدمتك
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/path/to/your/executable/directory
ExecStart=/path/to/your/executable
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

احفظ الملف وأغلقه.

بدء الخدمة مع تأخير

إذا كنت تشك في وجود مشكلة في توقيت بدء الخدمة، ففكر في إضافة تأخير إلى تكوين الخدمة الخاصة بك:

[Service]
ExecStartPre=/bin/sleep 10

اعتمادات الخدمة

لتكوين اعتمادات خدمتك: في قسم [Unit] من ملف تكوين الخدمة،

أضف الإرشادات التالية:

استخدم After= لتحديد الخدمات التي يجب أن تبدأ قبل خدمتك:

After=network.target other_service.service

استخدم Requires= لتحديد الاعتماديات الصارمة:

Requires=required_service.service

استخدم Wants= للاعتماديات غير الضرورية:

Wants=optional_service.service

إعادة تحميل systemd لتحديد الخدمة الجديدة

sudo systemctl daemon-reload

التحقق من اعتمادات الخدمة

sudo systemctl list-dependencies your_service_name.service

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

sudo systemctl enable your_service_name.service

لتأكيد أن خدمتك مُعدة لتشغيلها عند التشغيل:

sudo systemctl is-enabled your_service_name.service

بدء الخدمة

sudo systemctl start your_service_name.service
# أو
sudo systemctl restart your_service_name.service

التحقق من حالة الخدمة

إذا حدث خطأ ما - تحقق من سجلات الخدمة وحالة لينكس:

sudo systemctl status your_service_name.service

أو

sudo journalctl -u your_service_name.service

بالنسبة للنصوص البرمجية في بايثون

ExecStart=/path/to/conda/envs/my_env_name/bin/python /path/to/executable.py

التعليقات

يمكنك الآن إدارة خدمتك باستخدام أوامر systemctl، مثل start، stop، restart، و status.

للبرامج القابلة للتنفيذ التي تتطلب معلمات، قم بتعديل سطر ExecStart في ملف الخدمة حسب الحاجة.

على سبيل المثال، إذا كنت بحاجة لتشغيل تطبيق Java، استخدم الأمر الكامل لـ Java في سطر ExecStart.

تذكر تعديل أذونات الملفات وملكية الملفات حسب الضرورة، وتأكد من أن البرنامج القابل للتنفيذ لديه الأذونات الصحيحة للتشغيل.

التحكم في خدمات systemd باستخدام chkservice

بدلاً من تنفيذ الأمر التالي:

sudo systemctl start some-serviceservice
# أو
sudo systemctl restart some-serviceservice

يمكنك استخدام أداة واجهة المستخدم المُسهلة والخفيفة:

sudo apt-get install chkservice

sudo chkservice

روابط مفيدة