Systemd

如何在重啟或關機時執行 /usr/lib/systemd/system-shutdown/ 中的腳本?

  • March 27, 2020

根據此答案此錯誤報告 ,您可以簡單地將腳本放入

/usr/lib/systemd/system-shutdown/

或者對於 Debian

/lib/systemd/system-shutdown/

讓它在重新啟動或關機時執行。從

https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html:

在執行實際系統之前,halt/poweroff/reboot/kexec systemd-shutdown 將執行 /usr/lib/systemd/system-shutdown/ 中的所有執行檔,並向它們傳遞一個參數:“halt”、“poweroff”、“rebo​​ot” " 或 “kexec”,具體取決於所選的操作。此目錄中的所有執行檔都是並行執行的,並且在所有執行檔完成之前不會繼續執行操作。

我的腳本在How to run a script at shutdown on Debian 9 or Raspbian 8 (Jessie)中描述為:

#!/bin/sh
touch /test

但是,它似乎沒有在我的 Debian 系統上執行,我什至將它報告為bug

事實上,腳本正在執行。正如 Bigon 和錯誤報告中指出的那樣,touch只是無法生效,因為在執行腳本時文件系統已經以只讀方式安裝/lib/systemd/system-shutdown/

可以通過在 之前掛載和 fs 讀寫來證明這一點touch

#!/bin/sh
mount -oremount,rw /
touch /test
mount -oremount,ro /

現在/test重啟後真的出現了。

然而,這也意味著通過這個文件夾執行我的腳本將沒有用,因為它發生得太晚了。

為了寫入日誌文件等,需要通過Bigon建議的服務提前執行腳本。我在How to run a script at shutdown on Debian 9 or Raspbian 8 (Jessie)對此進行了解釋。

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