通過 bash 腳本使用 systemctl 編輯?
我經常安裝 Debian。為此,我有一個全自動的 preseed.cfg;在 preseed 結束時,它會從我的 TFTP 伺服器下載並執行 postinstall.sh 腳本,該腳本會進行一些額外的自定義。
我正在從 GNOME 切換到 LXQTE,並使用 SDDM 而不是 GDM。但是,對於我的硬體,SDDM 嘗試啟動太快。為了解決這個問題,我一直在使用
systemctl edit sddm
添加以下內容:[Service] ExecStartPre=/bin/sleep 5
這很好用,我想通過將它添加到 postinstall.sh 腳本來自動化這個過程。但是,我不知道如何
systemctl edit
通過 bash 腳本傳遞文件內容。我怎樣才能做到這一點?
您可以覆蓋
$SYSTEMD_EDITOR
環境變數以在執行時使用不同於編輯器的命令systemctl edit
。例如,使用類似的東西
SYSTEMD_EDITOR='cp /path/to/source.file'
似乎可以正常工作(儘管它非常難看,但希望 systemd 將最後一個參數附加到那裡!)對於您的特定情況,您可以使用:
$ { echo "[Service]"; echo "ExecStartPre=/bin/sleep 5"; } >~/tmp/sddm-override.conf $ sudo env SYSTEMD_EDITOR="cp $HOME/tmp/sddm-override.conf" systemctl edit sddm
但
systemctl edit
真正要做的只是在目錄下創建一個覆蓋文件(在這種情況下,命名為override.conf
)/etc/systemd/system/<service>.service.d/
,如果它不存在則創建它……所以直接這樣做也是一種完全接受的方法。(有關更多詳細資訊,請參閱systemd.unit 手冊頁中提到的“drop-in”和“override” 。)因此,在您的情況下,這將是一個合適的解決方案:
$ sudo mkdir -p /etc/systemd/system/sddm.service.d/ $ { echo "[Service]"; echo "ExecStartPre=/bin/sleep 5"; } | sudo tee /etc/systemd/system/sddm.service.d/10-startup-delay.conf $ sudo systemctl daemon-reload
它會在您的單元的“drop-in”目錄中刪除一個包含預期內容的文件,在這種情況下,您也可以在它嘗試完成的內容之後對其進行適當的命名。
**更新:**正如@GracefulRestart 指出的那樣,您需要
systemctl daemon-reload
在直接添加一個外掛之後。