引用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