去引用http://www.freedesktop.org/software/systemd/man/systemd.service.html#Command%lines:
命令行接受“%”说明符,如 systemd.unit(5) 中所述。请注意,命令行的第一个参数(即要执行的程序)可能不包含说明符。
我刚刚遇到了一个想要这样做的用例。
为什么这不可能?有没有建议的解决方法?
答案1
根据作者本人(诗人)的说法这线程:禁止,因为可能提前需要可执行文件名称(例如:SELinux 需要这个)。
但根据同一主题中的其他人以及那一、有时仍然有效。
鉴于大多数说明符可以预先静态确定(模板、机器等),它最终应该得到支持。
与此同时,一个解决方案是启动一个 shell,正如问题评论和第一个帖子中所述:
ExecStart=/bin/sh -c "exec opt/%i/bin/service --args"
另一个解决方案是手动调用 ELF 解释器:
ExecStop=/lib64/ld-linux-x86-64.so.2 /usr/local/bin/%i-cli stop
/usr/bin/perl script.pl
(基本上与手动运行而不是信任脚本的想法相同)
答案2
一种方法可能是使用/usr/bin/env
,然后正常运行该命令。
就我而言,我想编写一个非绝对的 npm 命令:
ExecStart=/usr/bin/env npm start -- -p 2345
在你的情况下你可以做类似的事情
ExecStart=/usr/bin/env some-command/%i/bin