如何創建系統目標?
在大量搜尋有關 systemd 的文章、Youtube 影片和“文件”之後,我仍然不知所措。
連結(https://wiki.archlinux.org/index.php/systemd#Create_custom_target)看起來很有希望,但有點含糊(對我來說)。
問題
如何創建自定義 systemd 目標(即: foo.target )以便可以使用選擇的 .service 單元啟動?
例子
- 系統啟動 default.target(“foo.target”的符號連結)
- “foo.target” 只啟動準系統 X 伺服器和 GUI 程序,比如 “gvim”。
原因
我只是想創建一個自定義目標來快速啟動一個 X 程序。我會很高興排除所有我不需要的服務。
提前致謝!
通讀
man 5 systemd.unit
並man 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=
指令中。