Skip to content

systemd هو نظام init ومدير خدمات لأنظمة التشغيل Linux يدير بدء التشغيل والتحكم في عمليات وخدمات النظام.


لتشغيل تطبيق Bun كعملية خلفية باستخدام systemd، ستحتاج إلى إنشاء ملف خدمة في /lib/systemd/system/.

sh
cd /lib/systemd/system
touch my-app.service

إليك ملف خدمة نموذجي يشغل تطبيقًا عند بدء النظام. يمكنك استخدام هذا كقالب للخدمة الخاصة بك. استبدل YOUR_USER باسم المستخدم الذي تريد تشغيل التطبيق به. للتشغيل كـ root، استبدل YOUR_USER بـ root، على الرغم من أن هذا غير موصى به بشكل عام لأسباب أمنية.

راجع وثائق systemd للحصول على مزيد من المعلومات حول كل إعداد.

ini
[Unit]
# وصف التطبيق
Description=My App
# بدء التطبيق بعد توفر الشبكة
After=network.target

[Service]
# عادةً ستستخدم 'simple'
# واحد من https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=
Type=simple
# المستخدم الذي سيتم استخدامه عند بدء التطبيق
User=YOUR_USER
# مسار الدليل الجذري لتطبيقك
WorkingDirectory=/home/YOUR_USER/path/to/my-app
# الأمر لبدء التطبيق
# يتطلب مسارات مطلقة
ExecStart=/home/YOUR_USER/.bun/bin/bun run index.ts
# سياسة إعادة التشغيل
# واحد من {no|on-success|on-failure|on-abnormal|on-watchdog|on-abort|always}
Restart=always

[Install]
# بدء التطبيق تلقائيًا
WantedBy=multi-user.target

إذا كان تطبيقك يبدأ خادم ويب، فلاحظ أن المستخدمين غير root لا يمكنهم الاستماع على المنافذ 80 أو 443 بشكل افتراضي. للسماح بشكل دائم لـ Bun بالاستماع على هذه المنافذ عند تنفيذه بواسطة مستخدم غير root، استخدم الأمر التالي. هذه الخطوة غير ضرورية عند التشغيل كـ root.

bash
setcap CAP_NET_BIND_SERVICE=+eip ~/.bun/bin/bun

بعد تكوين ملف الخدمة، يمكنك الآن تفعيل الخدمة. بمجرد التفعيل، ستبدأ تلقائيًا عند إعادة التشغيل. يتطلب هذا أذونات sudo.

bash
systemctl enable my-app

لبدء الخدمة دون إعادة التشغيل، يمكنك _بدء_ها يدويًا.

bash
systemctl start my-app

تحقق من حالة تطبيقك باستخدام systemctl status. إذا قمت ببدء تطبيقك بنجاح، يجب أن ترى شيئًا مثل هذا:

bash
systemctl status my-app
txt
● my-app.service - My App
     Loaded: loaded (/lib/systemd/system/my-app.service; enabled; preset: enabled)
     Active: active (running) since Thu 2023-10-12 11:34:08 UTC; 1h 8min ago
   Main PID: 309641 (bun)
      Tasks: 3 (limit: 503)
     Memory: 40.9M
        CPU: 1.093s
     CGroup: /system.slice/my-app.service
             └─309641 /home/YOUR_USER/.bun/bin/bun run /home/YOUR_USER/application/index.ts

لتحديث الخدمة، قم بتحرير محتويات ملف الخدمة، ثم أعد تحميل daemon.

bash
systemctl daemon-reload

للحصول على دليل كامل حول تكوين وحدة الخدمة، يمكنك التحقق من هذه الصفحة. أو راجع ورقة الغش هذه للأوامر الشائعة:

bash
systemctl daemon-reload # إخبار systemd بتغيير بعض الملفات
systemctl enable my-app # تفعيل التطبيق (للسماح بالبدء التلقائي)
systemctl disable my-app # تعطيل التطبيق (إيقاف البدء التلقائي)
systemctl start my-app # بدء التطبيق إذا كان متوقفًا
systemctl stop my-app # إيقاف التطبيق
systemctl restart my-app # إعادة تشغيل التطبيق

Bun بواسطة www.bunjs.com.cn تحرير