systemd 实例名称 (%i) 在 ExecStart 中不起作用

systemd 实例名称 (%i) 在 ExecStart 中不起作用

由于某种原因,systemd 没有在 ExecStart 中用实例名称替换%i或替换%I


/systemd/系统/服务/[电子邮件保护]

[Unit]
Description=Foo service for %I

[Service]
User=keith
ExecStart=/path/to/foo/%i/food
...

/路径/到/foo/bar/food

#/bin/bash

node /path/to/foo/bar/bard.js

然后我运行:

$ sudo systemctl daemon-reload
$ sudo systemctl start foo@bar
$ sudo systemctl status foo@bar[email protected] - Foo service for bar
   Loaded: loaded (/etc/systemd/system/[email protected]; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2016-09-30 19:07:02 EDT; 6s ago
  Process: 18705 ExecStart=/path/to/foo/%i/food (code=exited, status=203/EXEC)
 Main PID: 18705 (code=exited, status=203/EXEC)

Sep 30 19:07:02 kptow systemd[1]: Started Foo service for bar.
Sep 30 19:07:02 kptow systemd[1]: [email protected]: Main process exited, code=exited, status=203/EXEC
Sep 30 19:07:02 kptow systemd[1]: [email protected]: Unit entered failed state.
Sep 30 19:07:02 kptow systemd[1]: [email protected]: Failed with result 'exit-code'.

%I描述中的 被替换了,但 ExecStart 中的却%i没有。我试过使用%i/ %I,但都不起作用。

答案1

第一个参数必须ExecStart=是可执行文件的绝对路径。不接受替换。

如果您只是加载一个 bash 脚本然后启动 Node.js,那么您可以明确地执行以下操作:

ExecStart=/bin/bash /path/to/foo/%i/food

答案2

为了补充已接受的答案,可以使用以下方法替换执行任何文件(包括二进制文件)/usr/bin/env

ExecStart=/usr/bin/env /path/to/foo/%i/food

相关内容