如何确保 systemd 服务在 SSH 服务器关闭之前运行?

如何确保 systemd 服务在 SSH 服务器关闭之前运行?

我创建了一项systemd服务,可以在机器关闭之前执行一些操作。其单元文件为:

[Unit]
Before=shutdown.target
DefaultDependencies=no

[Service]
Type=simple
ExecStart=/opt/demo.sh
TimeoutSec=infinity

[Install]
WantedBy=shutdown.target

目前,该脚本在计算机失去网络连接之前运行,但在 SSH 连接关闭之后,如果我尝试重新连接,则会失败并出现“连接被拒绝”错误。我更喜欢保持 SSH 连接直到脚本本身终止(例如能够tail -f /var/log/syslog执行它。)

如何在 SSH 服务器关闭之前强制运行脚本?

答案1

您可以通过使用 systemd 单元来实现所需的结果,如下所示:

[Unit]
Description=Service to run on shutdown before any other services
After=default.target

[Service]
Type=oneshot
ExecStart=/bin/true
ExecStop=/opt/demo.sh
RemainAfterExit=yes
TimeoutStopSec=0

[Install]
WantedBy=default.target

systemd 根据服务的依赖关系以相反的顺序停止服务。因此,上述服务/bin/true在系统达到停止/关闭状态后启动default.target,并且脚本/opt/demo.sh处于停止/关闭状态。根据您的要求,您可能需要进行调整TimeoutStopSec,目前它设置为永不超时(而不是默认的 90 秒)

相关内容