Shell-Script
如何為 Systemd 編寫啟動腳本?
我的筆記型電腦上有 2 個顯卡。一個是IGP,另一個是離散的。
我編寫了一個 shell 腳本來關閉獨立顯卡。
如何將其轉換為 systemd 腳本以在啟動時執行它?
主要有兩種方法可以做到這一點:
帶腳本
如果您必須執行腳本,則不要轉換它,而是通過
systemd
服務執行腳本:因此您需要兩個文件:腳本和
.service
文件(單元配置文件)。確保您的腳本是可執行的,並且第一行(shebang)是
#!/bin/sh
. 然後.service
在/etc/systemd/system
(一個純文字文件,我們稱之為vgaoff.service
)中創建文件。例如:
- 劇本:
/usr/bin/vgaoff
- 單位文件:
/etc/systemd/system/vgaoff.service
現在,編輯單元文件。它的內容取決於你的腳本是如何工作的:
如果
vgaoff
只是關閉 gpu,例如:exec blah-blah pwrOFF etc
那麼內容
vgaoff.service
應該是:[Unit] Description=Power-off gpu [Service] Type=oneshot ExecStart=/usr/bin/vgaoff [Install] WantedBy=multi-user.target
If
vgaoff
用於關閉 GPU 並重新打開它,例如:start() { exec blah-blah pwrOFF etc } stop() { exec blah-blah pwrON etc } case $1 in start|stop) "$1" ;; esac
那麼內容
vgaoff.service
應該是:[Unit] Description=Power-off gpu [Service] Type=oneshot ExecStart=/usr/bin/vgaoff start ExecStop=/usr/bin/vgaoff stop RemainAfterExit=yes [Install] WantedBy=multi-user.target
沒有腳本
對於最瑣碎的情況,您可以不使用腳本並直接執行某個命令:
關機:
[Unit] Description=Power-off gpu [Service] Type=oneshot ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch" [Install] WantedBy=multi-user.target
要關閉和打開電源:
[Unit] Description=Power-off gpu [Service] Type=oneshot ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch" ExecStop=/bin/sh -c "echo ON > /whatever/vga_pwr_gadget/switch" RemainAfterExit=yes [Install] WantedBy=multi-user.target
啟用服務
完成文件後,啟用服務:
systemctl enable vgaoff.service
它將在下次啟動時自動啟動。您甚至可以一次性啟用和啟動服務
systemctl enable --now vgaoff.service
自
systemd v.220
(在較舊的設置上,您必須手動啟動它)。有關更多詳細資訊,請參閱
systemd.service
手冊頁。故障排除