![systemd 如何在 init 0 或 init 6 之后立即执行第一件事](https://linux22.com/image/204457/systemd%20%E5%A6%82%E4%BD%95%E5%9C%A8%20init%200%20%E6%88%96%20init%206%20%E4%B9%8B%E5%90%8E%E7%AB%8B%E5%8D%B3%E6%89%A7%E8%A1%8C%E7%AC%AC%E4%B8%80%E4%BB%B6%E4%BA%8B.png)
我的/etc/systemd/system/myshutdown.service
有
#!/bin/bash
[Unit]
Description=license administration shutdown
DefaultDependencies=no
After=final.target
[Service]
Type=oneshot
ExecStart=/root/scripts/license_administration_shutdown.sh
[Install]
WantedBy=final.target
我license_administration_shutdown.sh
执行了一些操作lmutil lmdown -force
来杀死我启动的那些相应的服务/root/scripts/license_administration.sh
以及相应的 systemd 服务。
init 6
我的问题是我希望我的关闭脚本立即发生,或者作为完成后的第一件事之一init 0
,我的上述 systemd 服务语法是否正确?我的目的是杀死那些我认为造成的 lmgrd 进程会话中的停止作业正在运行警告关闭/重启时会出现 1 分 30 秒的不便延迟。
上述服务是否可以添加或更改更多语法,以赋予其更高的优先级或确保它在完成init 6
后立即发生?init 0
答案1
与其创建服务停止服务,不如ExecStopPost
向许可证管理器服务添加操作可能是最好的选择。
如果许可证管理器使用默认依赖项,那么它会自动与 shutdown.target 发生冲突。如果它不使用默认依赖项,您可以将其添加Conflicts=shutdown.target
到许可证管理器的服务描述中。
当系统关闭或重新启动时,它通过调用 shutdown.target 来实现,该目标(大多数情况下)会自动与每个正在运行的服务发生冲突。您的许可证管理器服务将停止,并且作为其一部分,它将运行 指定的命令ExecStopPost=
。