我有一个脚本,想在 CentOS 7 机器关机前运行。上一个问题详细描述了使用 systemd 执行此操作的过程。基本上,我只需将要执行的脚本放入其中/usr/lib/systemd/system-shutdown/
,它就会自动运行。
这可行,但我的脚本可能需要一段时间(几分钟)。似乎有 90 秒的超时,之后我的脚本被终止,系统继续停止。我怎样才能改变这个时间限制?
基于在这里讨论,我尝试设置DefaultTimeoutStartSec=infinity
和DefaultTimeoutStopSec=infinity
in /etc/systemd/system.conf
,但没有达到预期的效果。
编辑:
我进一步挖掘并找到了原因:当关闭脚本以这种方式运行时,它们由二进制文件执行systemd-shutdown
。其源码可以可以在这里找到。具体来说,这段代码负责执行脚本:
execute_directories(dirs, DEFAULT_TIMEOUT_USEC, NULL, NULL, arguments);
DEFAULT_TIMEOUT_USEC
定义basic/def.h
如下:
#define DEFAULT_TIMEOUT_USEC (90*USEC_PER_SEC)
所以似乎有一个硬编码的 90 秒限制,使得这个机制对我的需要毫无用处。还有什么其他方法适合在关机时运行脚本?我可以创建自己的 systemd 服务作为WantedBy
停止目标吗?我想在文件系统以只读方式重新安装后运行该脚本(在该过程中已经很晚了)。