在.container檔的[install]幾乎千篇一律只有一個設定:WantedBy=default.target。
它的目的是什麼?
這可以追溯到第四天的離線安裝Podman時,執行過的一個指令:sudo loginctl enable-linger appuser。就可以在appuser沒登入的情況下,仍可以啟動該appuser預先啟動的服務,所以rootless帳號的target就預設是default.target,在.container檔的[install]設定WantedBy=default.target就是告訴Linux希望一開機時,以appuser的帳號背景啟動本服務。
那target是什麼單位?跟service一樣同屬systemd的一種unit類型。其它Unit類型還有socket、mount、timer、path等。
target特殊在於它不是daemon也沒PID,而是告訴Linux說有這個帳號在就要拉起Wants的所有服務,可以用以下指令看appuser預設要啟動哪些服務。
$ systemctl --user list-dependencies default.target
default.target
● ├─a2a-api.service
● ├─a2a-auth.service
● ├─a2a-batch.service
● ├─a2a-proxy.service
● ├─a2a-web.service
● └─basic.target
● ├─systemd-tmpfiles-setup.service
● ├─paths.target
● ├─sockets.target
● │ └─dbus.socket
● └─timers.target
● ├─grub-boot-success.timer
● └─systemd-tmpfiles-clean.timer
default.taget裡還包括basic.target,是該rootless基本要啟用哪些unit,已在Podman Quadlet範圍之外。而root帳的target通常是multi-user.target或graphical.target,有興趣的讀者可另行研究。
而除了WantedBy,在[install]標籤還支援哪些key?列表如下:
| Key | 意義 | 常用程度 |
|---|---|---|
WantedBy= |
某 target 啟動時,希望一起啟動此 service | ★★★★★ |
RequiredBy= |
某 target/unit 啟動時,強制需要此 service | ★★ |
UpheldBy= |
對方 active 期間,持續維持此 service active | ★ |
Alias= |
替產生的 service 建另一個名稱 | ★ |
DefaultInstance= |
template Quadlet 的預設 instance | 特殊用途 |
UpheldBy=default.target則通知service要重啟。Alias=proxy,則·systemctl --user status a2a-proxy也可以用systemctl --user status proxy替代。