Systemd 错误:可执行路径不是绝对的

Systemd 错误:可执行路径不是绝对的

我有以下的 systemd 代码。

[Unit]
Description=start RCC logger server process
Requires=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service
After=rcc-drbd.service rcc_check_locked_scr.service s96rcc.service

[Service]
ExecStart= exec /var/RCC/RCClogger.sh
Restart=no

[Install]
WantedBy=multi-user.target

当我尝试运行它时,出现以下错误。

Mar 23 04:45:52 localhost.localdomain systemd[1]: 
[/etc/systemd/system/rcc_logger.service:7] Executable path is not absolute, 
ignoring: exec /v...ogger.sh
Mar 23 04:45:52 localhost.localdomain systemd[1]: rcc_logger.service lacks 
both ExecStart= and ExecStop= setting. Refusing.

我知道这是因为 exec 命令没有绝对路径,但由于 exec 不是二进制文件,因此我无法使用绝对路径。如何让这个 ExecStart 运行?

答案1

您不能exec在 systemd 服务单元配置中使用。
exec是内置的 shell,不能直接从文件系统调用(它不驻留在文件系统上)——type exec并将whereis exec向您展示这一点。
使用它们编写的 shell。

例如,如果它是一个bash脚本,您可以像这样运行该脚本:

bash /var/RCC/RCClogger.sh

现在,bash是一个可执行文件,并且有一个绝对路径:/bin/bash。您的 ExecStart 将如下所示:

ExecStart=/bin/bash /var/RCC/RCClogger.sh

另一种方法是简单地添加一个shebang到脚本的开头:

#!/bin/bash
... script code ...

/bin/bash在这种情况下,这会告诉操作系统使用指定的解释器运行该文件。

之后只需让你的脚本可执行:

chmod +x /var/RCC/RCClogger.sh

并直接将其用作ExecStart

ExecStart=/var/RCC/RCClogger.sh

答案2

“EXecStart=” 需要绝对路径来启动服务。获取 .sh 文件的完整路径并将其附加到 ExecStart 语句中。

再次,“manpage”将为您提供详细信息。

相关内容