systemd 是一個用於 Linux 操作系統的初始化系統和服務管理器,負責管理系統進程和服務的啟動和控制。
要使用 systemd 以守護進程方式運行 Bun 應用,你需要在 /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如果你的應用啟動 Web 服務器,請注意,默認情況下非 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-apptxt
● 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要更新服務,編輯服務文件的內容,然後重新加載守護進程。
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 # 重啟應用