
掌握 Linux 中的自訂 Systemd 服務:綜合指南
Systemd 是跨各種 Linux 發行版的強大且動態的初始化系統。它有助於程式執行、資源管理和整個系統控制。本指南將協助您在 Ubuntu 中建立個人化的服務單元,充分發揮 Systemd 的潛力。
了解 Systemd 服務單元
從本質上講,服務單元是一個標準化文件,概述了執行特定應用程式所需的配置。它封裝了有關程式的元資料、執行指令以及會話期間有關 Systemd 存取框架的詳細資訊。
Systemd 支援的環境中的每個守護程序都由服務文件管理。例如,OpenSSH 使用ssh.service
位於的單元進行操作/etc/systemd/system/
,以指示其在 Debian 和 Ubuntu 系統中的運作。

一般來說,服務單元文件分為三個主要部分:Unit
、Service
和Install
。該Unit
部分錶示應用程式的元資料和依賴項,而該Service
部分指定其位置和執行方法。最後,Install
本節闡明了何時可以由 Systemd 啟動應用程式。
建立系統級自訂服務
自訂服務對於自動執行需要提升權限或利用 Systemd 計時器的任務非常有價值。一個典型的例子是確保您的 Minecraft 伺服器在系統重新啟動後可靠啟動。
建立自訂系統級服務的步驟
- 建立 Systemd 單元檔案:首先在您的主目錄中建立一個新的單元檔案。
- 插入配置:在新的單元檔案中新增以下範本。這是一個有效的基礎配置:
- 客製化您的服務:調整
Description
和ExecStart
欄位以添加與您的服務相關的詳細資訊。 - 移動檔案:儲存並傳輸至服務目錄:
- 重新載入 Systemd Daemon:執行指令重新載入服務:
- 啟動您的服務:啟動您的自訂系統級服務:
- 驗證功能:確認您的服務可以運作:
nano ~/my-system-app.service
[Unit] Description=My First Service After=network.target [Service] Type=simple ExecStart=/path/to/bin Restart=always [Install] WantedBy=multi-user.target
sudo cp ~/my-system-app.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl start my-system-app.service
systemctl status my-system-app.service

建立用戶級客製化服務
Systemd 支援使用 Systemd-user 建立無根服務,允許非 root 使用者有效地處理個人應用程序,同時透過最小化 root 存取權來增強安全性。
如何建立使用者級自訂服務:
- 設定單元檔案:在主目錄中建立一個新的單元檔案。
- 插入基本配置:在單元檔案中使用下列框架:
- 調整 ExecStart:
ExecStart
確保您的使用者帳戶可以存取指定的路徑。 - 建立使用者的本機 Systemd 目錄:
- 複製單元檔案:將您的自訂服務單元傳輸到本機目錄:
- 為使用者重新載入 Systemd:驗證 Systemd 檢查使用者目錄是否有變更:
- 檢查服務狀態:確保您的使用者服務被正確識別:
nano ~/my-user-app.service
[Unit] Description=My First User Service After=graphical-session.target [Service] Type=simple ExecStart=/path/to/bin [Install] WantedBy=default.target
mkdir -p ~/.config/systemd/user/
cp ~/my-user-app.service ~/.config/systemd/user/
systemctl daemon-reload --user
systemctl --user status my-user-app.service

優化您的自訂 Systemd 服務
Systemd 的靈活性讓使用者可以精細地調整服務參數和行為。
整合環境變數
環境變數無需修改設定檔即可為 Linux 程式提供附加上下文,並且 Systemd 支援將其合併到服務單元中。
- 停用服務:首先停用您想要修改的服務:
- 編輯您的服務文件:在您喜歡的文字編輯器中開啟單元文件:
- 修改服務部分:在此部分下
[Service]
,包括: - 重新載入守護程式:儲存並重新載入 Systemd 守護程式以套用變更:
- 重新啟動服務:使用新的環境變數重新啟動:
systemctl --user disable --now my-user-app.service
sudo nano ~/.config/systemd/user/my-user-app.service
Environment="VARIABLE_NAME=VALUE"
systemctl --user daemon-reload
systemctl --user start my-user-app.service

限制資源使用
Systemd 提供了規範服務資源使用的機制,以確保公平利用。
- 停用目標服務:首先完全停用它:
- 編輯單元檔案:使用以下命令開啟服務文件:
- 新增資源限制:例如,限制記憶體:
- 重新載入單位變更:重新載入新設定:
- 監控資源使用情況:透過以下方式追蹤服務效能:
sudo systemctl disable my-system-app.service
sudo nano /etc/systemd/system/my-system-app.service
MemoryHigh=SIZE
sudo systemctl daemon-reload
systemd-cgtop

結論
探索 Systemd 可以釋放 Linux 流程管理的巨大潛力。透過建立自訂服務,從自動化任務到管理資源效率,您可以顯著增強系統的互通性和效能。深入研究 Systemd 及其廣泛的功能,並考慮探索 Run0 相對於 Sudo 的比較優勢,以獲得更細緻的理解。
圖片來源:Mikhail Fesenko 透過 Unsplash 提供。所有修改和截圖均由 Ramces Red 完成。
常見問題
1.與傳統的 init 系統相比,使用 Systemd 服務有哪些優點?
Systemd 提供平行服務啟動、依賴管理和統一的服務處理方法,與傳統的 init 系統相比,提高了整體效能和可靠性。
2.我可以為單一應用程式建立多個服務嗎?
是的,您可以為單一應用程式建立多個服務單元來管理不同的方面,例如從不同的配置啟動或在特定條件下啟動。
3.如何解決 Systemd 服務的問題?
您可以使用指令來排除 Systemd 服務的故障,例如journalctl -u my-service-name.service
檢查日誌,以及systemctl status my-service-name.service
調查目前狀態和錯誤訊息。
發佈留言 ▼