关闭前使用 systemd 服务运行脚本需要很长时间并且无法完成

关闭前使用 systemd 服务运行脚本需要很长时间并且无法完成

我已在 systemd 中成功创建了一项服务,该服务在服务器关闭/重新启动之前运行脚本。但问题是我的脚本执行时间太长(大约 3-4 分钟)并且服务器在完成之前关闭。调试日志表明脚本确实正在运行,但中途停止了。

以下是我实现此服务的两种不同方法:

[Unit]
Description=Stop Service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/user/stop-service.sh

[Install]
WantedBy=multi-user.target

[Unit]
Description=Stop Service
DefaultDependencies=no
Before=final.target


[Service]
ExecStart=/home/user/stop-service.sh

[Install]
WantedBy=final.target

他们都成功调用,stop-service.sh但脚本运行时间太长。有什么方法可以确保stop-service.sh在服务器完全关闭之前完成运行吗?

我的服务器是RHEL7。

答案1

我找到了一种适合我的方法:

[Unit]
Description=Stop Service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/user/stop-service.sh
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target

根据我的研究,systemd 服务在发送终端信号之前,每个服务运行其停止命令 (ExecStop) 的默认等待时间为 90 秒。 TimeoutStopSec=300 会将一项特定服务的等待时间设置为 5 分钟。

如果要更改默认等待时间,可以找到文件 /etc/systemd/system.conf 并修改 DefaultTimeoutStopSec 的值,然后使用以下命令重新加载守护进程

systemctl daemon-reload

加载新值。

相关内容