從命令行使用 systemctl 創建一個新的 systemd unit/service/timer/sockets?
鑑於 CLI 工具
systemctl edit
可用於編輯現有的 systemd 單元,例如服務、計時器、套接字、設備、掛載、自動掛載、目標、交換、路徑、切片、範圍或 nspawn 文件,並且您還有另一個可以刪除/重置 systemd 單元的子命令我也可以像這樣創建一個新的 systemctl 文件嗎?大多數線上指南告訴您使用一些自定義文本編輯器並將文件放在某個地方(您首先需要找到正確的 systemd 目錄,再次……)。此外,如果您通過手動複製文件,則需要重新載入守護程序
systemctl daemon-reload
。但是,作為系統管理員,我可能會在預設位置快速創建一個新單元,就像
systemctl edit
編輯/覆蓋現有條目一樣。我只是喜歡它直接將我彈出到我最喜歡的 CLI 文本編輯器(nano 左右)中,我可以立即編輯我的內容。我試過
systemctl add
andsystemctl create
,但這兩個命令都不存在。我沒有在網上找到該資訊,也沒有在這裡找到任何 Stackexchange 答案……
實際上,如果您嘗試
systemctl edit
使用新的、尚不存在的服務執行該命令,它會告訴您確切的操作:$ systemctl edit happy-unicorns.service No files found for happy-unicorns.service. Run ‘systemctl edit --force --full happy-unicorns.service' to create a new unit.
因此要創建一個新的系統單元(在這種情況下是一個服務),實際上只需執行:
$ systemctl edit --force --full happy-unicorns.service
它會愉快地彈出您的文本編輯器(可以通過將環境變數設置
$EDITOR
為 Linux 工具的常用方法來指定)。含義:
--full
將編輯整個單元文件,而不是僅僅創建一個覆蓋。這意味著,在我們的範例中,它實際上將在適當的位置使用完整的服務文件,/etc/systemd/system/.#happy-unicorns.service11738733f89dc655
而不是創建目錄並覆蓋例如中的服務/etc/systemd/system/happy-unicorns.service.d/.#override.conf98be493089631328
。**注意:**您會看到 systemctl 附加了一些隨機數並將文件標記為臨時文件,以便不直接應用更改。它們仍然經過完整性檢查,並且在一切正確時移動文件。
--force
實際上需要指定創建一個新文件而不是編輯現有文件。- 如果您想通過添加常用開關在其他位置(即使用者或全域範圍)創建文件:您可以為所有使用者添加
--user
目前--global
使用者。--system
對於目前系統是預設值。我同意它可能不是那麼明顯,因為它不是一個單獨的子命令,但是當您考慮編輯任何文件並讓 systemctl 決定它是否是已經存在的文件時,它非常有意義。
另請參閱
systemctl
手冊頁以獲取更多資訊。