Shell-Script

通過 bash 腳本使用 systemctl 編輯?

  • May 9, 2022

我經常安裝 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在直接添加一個外掛之後。

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