在 Linux 上建立自訂 Systemd 服務的逐步指南

在 Linux 上建立自訂 Systemd 服務的逐步指南

掌握 Linux 中的自訂 Systemd 服務:綜合指南

Systemd 是跨各種 Linux 發行版的強大且動態的初始化系統。它有助於程式執行、資源管理和整個系統控制。本指南將協助您在 Ubuntu 中建立個人化的服務單元,充分發揮 Systemd 的潛力。

了解 Systemd 服務單元

從本質上講,服務單元是一個標準化文件,概述了執行特定應用程式所需的配置。它封裝了有關程式的元資料、執行指令以及會話期間有關 Systemd 存取框架的詳細資訊。

Systemd 支援的環境中的每個守護程序都由服務文件管理。例如,OpenSSH 使用ssh.service位於的單元進行操作/etc/systemd/system/,以指示其在 Debian 和 Ubuntu 系統中的運作。

顯示 OpenSSH 服務單元的終端。

一般來說,服務單元文件分為三個主要部分:UnitServiceInstall。該Unit部分錶示應用程式的元資料和依賴項,而該Service部分指定其位置和執行方法。最後,Install本節闡明了何時可以由 Systemd 啟動應用程式。

建立系統級自訂服務

自訂服務對於自動執行需要提升權限或利用 Systemd 計時器的任務非常有價值。一個典型的例子是確保您的 Minecraft 伺服器在系統重新啟動後可靠啟動。

建立自訂系統級服務的步驟

  • 建立 Systemd 單元檔案:首先在您的主目錄中建立一個新的單元檔案。
  • 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
  • 客製化您的服務:調整DescriptionExecStart欄位以添加與您的服務相關的詳細資訊。
  • 移動檔案:儲存並傳輸至服務目錄:
  • sudo cp ~/my-system-app.service /etc/systemd/system/
  • 重新載入 Systemd Daemon:執行指令重新載入服務:
  • sudo systemctl daemon-reload
  • 啟動您的服務:啟動您的自訂系統級服務:
  • sudo systemctl start my-system-app.service
  • 驗證功能:確認您的服務可以運作:
  • systemctl status my-system-app.service
終端機顯示自訂服務正常運作。

建立用戶級客製化服務

Systemd 支援使用 Systemd-user 建立無根服務,允許非 root 使用者有效地處理個人應用程序,同時透過最小化 root 存取權來增強安全性。

如何建立使用者級自訂服務:

  • 設定單元檔案:在主目錄中建立一個新的單元檔案。
  • 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
  • 調整 ExecStart:ExecStart確保您的使用者帳戶可以存取指定的路徑。
  • 建立使用者的本機 Systemd 目錄:
  • mkdir -p ~/.config/systemd/user/
  • 複製單元檔案:將您的自訂服務單元傳輸到本機目錄:
  • cp ~/my-user-app.service ~/.config/systemd/user/
  • 為使用者重新載入 Systemd:驗證 Systemd 檢查使用者目錄是否有變更:
  • systemctl daemon-reload --user
  • 檢查服務狀態:確保您的使用者服務被正確識別:
  • systemctl --user status my-user-app.service
顯示 systemctl 中識別的自訂使用者服務的終端。

優化您的自訂 Systemd 服務

Systemd 的靈活性讓使用者可以精細地調整服務參數和行為。

整合環境變數

環境變數無需修改設定檔即可為 Linux 程式提供附加上下文,並且 Systemd 支援將其合併到服務單元中。

  • 停用服務:首先停用您想要修改的服務:
  • systemctl --user disable --now my-user-app.service
  • 編輯您的服務文件:在您喜歡的文字編輯器中開啟單元文件:
  • sudo nano ~/.config/systemd/user/my-user-app.service
  • 修改服務部分:在此部分下[Service],包括:
  • Environment="VARIABLE_NAME=VALUE"
  • 重新載入守護程式:儲存並重新載入 Systemd 守護程式以套用變更:
  • 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-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調查目前狀態和錯誤訊息。

來源和圖片

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *