Boot

如何創建系統目標?

  • March 24, 2021

在大量搜尋有關 systemd 的文章、Youtube 影片和“文件”之後,我仍然不知所措。

連結(https://wiki.archlinux.org/index.php/systemd#Create_custom_target)看起來很有希望,但有點含糊(對我來說)。

問題

如何創建自定義 systemd 目標(即: foo.target )以便可以使用選擇的 .service 單元啟動?

例子

  1. 系統啟動 default.target(“foo.target”的符號連結)
  2. “foo.target” 只啟動準系統 X 伺服器和 GUI 程序,比如 “gvim”。

原因

我只是想創建一個自定義目標來快速啟動一個 X 程序。我會很高興排除所有我不需要的服務。

提前致謝!

通讀man 5 systemd.unitman 5 systemd.target告訴我們單元文件用於定義目標以及 systemd 的所有其他內容。沒有專門關於如何創建目標的文件,因此很難確定應該如何完成,但它與創建服務並沒有太大區別。

創建目標時,您需要從 systemd 服務目錄創建指向該目錄的符號連結。target.wants然後你可以設置/啟動你的目標。給出您的範例,這就是它的外觀。

/etc/systemd/system/foo.target

這是目標的單元文件。如果以graphics.target為例,我們可以以此為基礎創建自己的target。

[Unit]
Description=Foobar boot target
Requires=multi-user.target
Wants=foobar.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target
AllowIsolate=yes

解釋從 systemd 聯機幫助頁中獲取的選項;

  • Description– 描述目標。你應該明白
  • Requires– 目標的硬依賴。您應該在啟動自己的服務之前啟動基本系統
  • Wants– 軟依賴。目標不需要這些來啟動。
  • Conflicts– 如果一個單位在另一個單位上有衝突設置,啟動前者將停止後者,反之亦然。
  • After– 在這些服務之後啟動
  • AllowIsolate– 真的取決於你和你的環境。詳細資訊可在手冊頁中找到systemd.unit(5)

/etc/systemd/system/foo.target.wants/

這是您將連結您為目標創建/需要的服務的目錄。相當於Wants=單元文件中的選項。創建這個目錄,然後像這樣創建符號連結;ln -s /usr/lib/systemd/system/bar.service /etc/systemd/system/foo.target.wants/bar.service. 這將創建一個從系統目錄中的 bar.service 到 foo.target.wants 目錄的符號連結。


我認為為服務創建一個單元文件有點超出了這個答案的範圍,而且這個問題肯定有更多的記錄,所以我現在就把它排除在外。創建單元文件時,只需將其符號連結到 target.wants 目錄或將其添加到Wants=指令中。

引用自:https://unix.stackexchange.com/questions/301987