Systemd:为什么不可以在ExecStart =的第一个参数中使用%i?

引用http://www.freedesktop.org/software/systemd/man/systemd.service.html#Command%lines :

命令行接受systemd.unit(5)中所述的“%”说明符。 请注意,命令行的第一个参数(即要执行的程序)可能不包含说明符。

我刚碰到一个用例,我想这样做。

为什么这是不可能的? 有没有build议的解决方法?

根据作者本人(诗人)在这个线程:它是禁止的,因为可执行的名称可能需要提前(例如:SELinux需要这个)。

但是按照其他的在同一个线程,在那个 ,还有一段时间还在工作 – 是啊。

鉴于大多数指定符可以事先静态确定(模板,机器等),最终应该得到支持。

与此同时,一个解决scheme是启动一个shell,如问题注释和第一个线程中所述:

 ExecStart=/bin/sh -c "exec opt/%i/bin/service --args" 

另一个解决scheme是手动调用ELF解释器:

 ExecStop=/lib64/ld-linux-x86-64.so.2 /usr/local/bin/%i-cli stop 

(基本上和手动运行/usr/bin/perl script.pl而不是相信脚本的砰砰声)

一种方法可能是使用/usr/bin/env ,然后像平常那样运行命令。

就我而言,我想写一个非绝对的npm命令:

 ExecStart=/usr/bin/env npm start -- -p 2345 

在你的情况下,你可能会做类似的事情

 ExecStart=/usr/bin/env some-command/%i/bin