Pra*_* CM 12 linux upstart systemd init-script redhat-enterprise-linux
我有以下 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
Run Code Online (Sandbox Code Playgroud)
在我尝试运行它的地方,出现以下错误。
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.
Run Code Online (Sandbox Code Playgroud)
我知道这是因为没有 exec 命令的绝对路径,但是由于 exec 作为二进制文件不可用,我不能使用绝对路径。如何让这个 ExecStart 运行?
Fan*_*que 15
您不能exec在 systemd 服务单元配置中使用。
exec是一个shell内置的,不能从文件系统中直接调用(它不存在于文件系统) -type exec并whereis exec会告诉你这一点。
使用编写它们的外壳。
例如,如果它是一个bash脚本,您可以像这样运行脚本:
bash /var/RCC/RCClogger.sh
Run Code Online (Sandbox Code Playgroud)
现在,bash是一个可执行文件并且确实有一个绝对路径:/bin/bash. 您的 ExecStart 将如下所示:
ExecStart=/bin/bash /var/RCC/RCClogger.sh
Run Code Online (Sandbox Code Playgroud)
另一种方法是简单地将 a 添加shebang到脚本的开头:
#!/bin/bash
... script code ...
Run Code Online (Sandbox Code Playgroud)
/bin/bash在这种情况下,这会告诉操作系统使用指定的解释器运行文件。
之后,只需使您的脚本可执行:
chmod +x /var/RCC/RCClogger.sh
Run Code Online (Sandbox Code Playgroud)
并将其直接用作ExecStart:
ExecStart=/var/RCC/RCClogger.sh
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55469 次 |
| 最近记录: |