Como evitar um caminho absoluto para um executável no systemd?

1

Tenho vários projetos diferentes que já contêm serviços Upstart e estou implementando a abordagem para vincular esses serviços em /etc/init diretamente de uma cópia de trabalho do SVN. O Upstart fornece scripts incorporados nos quais eu sou capaz de simplesmente ler o destino do meu link simbólico e executar scripts adicionais ou o executável do próprio serviço. O importante para minha configuração é apenas a seguinte linha:

cd "$(dirname "$(dirname "$(readlink "/etc/init/${UPSTART_JOB}.conf")")")"

Dessa forma, não preciso codificar qualquer caminho absoluto para minhas cópias de trabalho, mas simplesmente confio no link simbólico e em algum layout de diretório relativo definido de meus vários projetos. Eu gostaria de implementar a mesma abordagem para o systemd, mas furar o máximo possível aos seus conceitos sugeridos, o que parece não suportar scripts embutidos da maneira que eu usei anteriormente.

Eu já sei que systemctl enable /usr/local/.../someApp.service me permite manter minha definição de serviço na cópia de trabalho do SVN . A única coisa que estou sentindo atualmente é adotar corretamente minha abordagem readlink para não precisar codificar um caminho absoluto. Eu já li sobre especificadores , mas pelo que entendi, eles não fornecem informações caminhos e não resolver links simbólicos.

Além disso, eu sou capaz de executar diretamente shells com uma linha de comando adicional e, em teoria, incorporar minha abordagem readlink lá. Mas isso parece feio.

Outra abordagem que tenho em mente é algum script dispatcher em todo o sistema, já tenho algum /usr/local/vendor em todo o sistema, para o qual eu poderia encaminhar especificadores e implementar minha abordagem readlink externamente.

Mas há algo mais fácil que estou perdendo? Algo simples como o seguinte, em que %f seria o destino do link simbólico resolvido:

ExecStart = %f/../../bin/someApp.pl

O que parece ser mais fácil do que os exemplos a seguir:

ExecStart = /bin/sh -c "..."

ExecStart = /usr/local/vendor/systemd/dispatcher "%f"

Obrigado!

    
por Thorsten Schöning 03.01.2018 / 21:04

1 resposta

0

Não, o systemd não tem recurso interno para isso.

Assim como no Upstart, você terá que chamar um shell.

    
por 03.01.2018 / 21:16