由于默认依赖项 = no 的服务,关闭现在非常慢

由于默认依赖项 = no 的服务,关闭现在非常慢

我有一个嵌入式 Linux 系统,当我制作的特定服务正在运行时,它需要很长时间才能关闭。它需要尽快开始运行,这就是为什么它设置了 DefaultDependency=no 选项。

当我跑步时

systemctl stop myService

它按预期工作,服务立即停止。

然而当我跑步时

shutdown now

我可以看到服务持续运行(LED 持续变化) 服务运行的可执行文件具有 SIGTERM 和 SIGINT 的信号处理程序

如果我手动运行可执行文件并按 ctrl+c 发送 SIGINT,它也会很好地停止

不幸的是,我无法从journalctl 获得任何好的日志信息。

有谁知道这是怎么发生的?

关闭不会触发 systemctl 停止所有服务吗?

我是否需要指定其他内容才能使其正常关闭?

编辑:根据要求提供服务

### My service###

[Unit]
Description=My service
DefaultDependencies=no

[Service]
CPUAffinity=3
ExecStart=/path/to/startscript.sh
Type=simple

[Install]
WantedBy=sysinit.target

启动脚本只是确保可执行文件具有可执行权限,因为在手动更新后它可能会丢失此权限。然后像这样执行

nice -n -20 /path/to/exe.elf

可执行文件具有非常高的优先级,它有自己的CPU和高niceness。

答案1

你为什么设置DefaultDependencies=no?仅在一些不寻常的用例中才需要这样做。

systemd.service(5) 联机帮助页显示:

默认依赖项 除非设置 DefaultDependencies=no,否则将添加以下依赖项:

• 服务单元将具有 sysinit.target 上的 Requires= 和 After= 类型的依赖关系、basic.target 上的 After= 类型的依赖关系以及 shutdown.target 上的 Conflicts= 和 Before= 类型的依赖关系。这些确保正常的服务单元进行基本的系统初始化,并在系统关闭之前干净地终止。只有涉及早期启动或延迟系统关闭的服务才应禁用此选项。

[...]

如果您确实需要/想要设置DefaultDependencies=no,则需要After=/Before=/Conflicts=手动显式设置依赖项,包括针对shutdown.target目标的依赖项

Nice=编辑:顺便说一句,您知道.service 文件中有该属性吗? (参见 systemd.exec(5) 手册页),无需调用nice可执行文件

相关内容