systemd هو نظام init ومدير خدمات لأنظمة التشغيل Linux يدير بدء التشغيل والتحكم في عمليات وخدمات النظام.
لتشغيل تطبيق Bun كعملية خلفية باستخدام systemd، ستحتاج إلى إنشاء ملف خدمة في /lib/systemd/system/.
cd /lib/systemd/system
touch my-app.serviceإليك ملف خدمة نموذجي يشغل تطبيقًا عند بدء النظام. يمكنك استخدام هذا كقالب للخدمة الخاصة بك. استبدل YOUR_USER باسم المستخدم الذي تريد تشغيل التطبيق به. للتشغيل كـ root، استبدل YOUR_USER بـ root، على الرغم من أن هذا غير موصى به بشكل عام لأسباب أمنية.
راجع وثائق systemd للحصول على مزيد من المعلومات حول كل إعداد.
[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.
setcap CAP_NET_BIND_SERVICE=+eip ~/.bun/bin/bunبعد تكوين ملف الخدمة، يمكنك الآن تفعيل الخدمة. بمجرد التفعيل، ستبدأ تلقائيًا عند إعادة التشغيل. يتطلب هذا أذونات sudo.
systemctl enable my-appلبدء الخدمة دون إعادة التشغيل، يمكنك _بدء_ها يدويًا.
systemctl start my-appتحقق من حالة تطبيقك باستخدام systemctl status. إذا قمت ببدء تطبيقك بنجاح، يجب أن ترى شيئًا مثل هذا:
systemctl status my-app● 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.
systemctl daemon-reloadللحصول على دليل كامل حول تكوين وحدة الخدمة، يمكنك التحقق من هذه الصفحة. أو راجع ورقة الغش هذه للأوامر الشائعة:
systemctl daemon-reload # إخبار systemd بتغيير بعض الملفات
systemctl enable my-app # تفعيل التطبيق (للسماح بالبدء التلقائي)
systemctl disable my-app # تعطيل التطبيق (إيقاف البدء التلقائي)
systemctl start my-app # بدء التطبيق إذا كان متوقفًا
systemctl stop my-app # إيقاف التطبيق
systemctl restart my-app # إعادة تشغيل التطبيق