如何在重新启动或关闭时执行 /usr/lib/systemd/system-shutdown/ 中的脚本?

如何在重新启动或关闭时执行 /usr/lib/systemd/system-shutdown/ 中的脚本?

根据这个答案这个错误报告 只需将脚本放入

/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",具体取决于所选操作。该目录中的所有可执行文件都是并行执行的,并且在所有可执行文件完成之前不会继续执行操作。

我的脚本描述于如何在 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/为特殊情况保留,并在关闭/重新启动过程的最后执行

相关内容