/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”、“reboot” " 或 "kexec",具体取决于所选操作。该目录中的所有可执行文件都是并行执行的,并且在所有可执行文件完成之前不会继续执行操作。
我的脚本描述于如何在 Debian 9 或 Raspbian 8 上关机时运行脚本 (Jessie)作为:
#!/bin/sh
touch /test
然而,它似乎无法在我的 Debian 系统上运行,我什至将其报告为漏洞。
答案1
事实上,脚本正在运行。正如 Bigon 和错误报告中所指出的那样,它无法生效,因为在执行touch
脚本时文件系统已经以只读方式挂载了。/lib/systemd/system-shutdown/
可以通过在之前挂载和 fs 读写来证明这一点touch
:
#!/bin/sh
mount -oremount,rw /
touch /test
mount -oremount,ro /
现在/test
重新启动后才真正出现。
但是,这也意味着通过此文件夹运行我的脚本将没有用,因为它发生得太晚了。
为了写入日志文件等,需要按照建议通过服务提前运行脚本比贡。我解释这一点如何在 Debian 9 或 Raspbian 8 上关机时运行脚本 (Jessie)。
答案2
所以如果你想在机器关闭期间运行脚本,你需要添加一个.service文件,参见:如何在关机前使用 systemd 运行脚本?
/lib/systemd/system-shutdown/
为特殊情况保留,并在关闭/重新启动过程的最后执行