Systemd: por que não é possível usar% i no primeiro argumento do ExecStart =?

2

Para citar o link :

The command line accepts "%" specifiers as described in systemd.unit(5). Note that the first argument of the command line (i.e. the program to execute) may not include specifiers.

Acabei de encontrar um caso de uso em que queria fazer isso.

Por que isso não é possível? Existe uma solução sugerida?

    
por maligree 09.02.2015 / 20:46

2 respostas

3

De acordo com o próprio autor (poettering) em este tópico: ele é proibido porque o nome do executável pode ser necessário com antecedência (por exemplo: o SELinux precisa disso).

Mas, de acordo com outro no mesmo segmento e em aquele , ele ainda funciona em algum momento -ish.

Dado que a maioria dos especificadores pode ser determinada estatisticamente com antecedência (modelo, máquina, etc.), ele deve ser suportado eventualmente.

Nesse meio tempo, uma solução é lançar um shell, conforme observado nos comentários da questão e no primeiro encadeamento:

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

Outra solução seria invocar manualmente o interpretador ELF:

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

(basicamente a mesma ideia de executar manualmente o /usr/bin/perl script.pl em vez de confiar no script do script)

    
por 23.05.2016 / 23:23
0

Uma maneira pode ser usar /usr/bin/env , depois executar o comando depois disso normalmente.

No meu caso, eu queria escrever um comando npm não absoluto:

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

No seu caso, você pode fazer algo como

ExecStart=/usr/bin/env some-command/%i/bin
    
por 31.12.2016 / 23:32

Tags