تشغيل أي ملف قابل للتنفيذ كخدمة في لينكس
تشغيل أي ملف قابل للتنفيذ كخدمة لينكس
هنا مجموعة من التعليمات حول
كيفية تكوين تشغيل أي برنامج قابل للتنفيذ كخدمة في لينكس باستخدام systemd.
الصورة أعلاه هي صورة مُولدة بواسطة الذكاء الاصطناعي (باستخدام نموذج 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