Systemd bash builtins

1

Eu tenho um aplicativo que precisa usar a fonte de comando para configurar seu arquivo de ambiente.

[Unit]
Description=Programname
After=syslog.target network.target

[Service]
User=root
ExecStartPre=source /opt/environmentname/bin/activate enviromentname
ExecStart=/var/programname/programname -f /etc/programname/programconfig.conf

[Install]
WantedBy=multi-user.target  

Agora, o Systemd reclama sobre o código-fonte porque esse não é um caminho absoluto e o código-fonte é um componente do bash, então eu tentei

ExecStartPre=/bin/bash -c "source /opt/environmentname/bin/activate enviromentname"

O fato de executarmos o script com a fonte, em vez de chmod + x, é devido aos requisitos do fornecedor.

Então, há uma maneira de fazer isso funcionar? Ou precisamos trabalhar com bifurcação ou algo assim?

Como podemos usar o builtin bash corretamente dentro dos arquivos da unidade Systemd?

    
por Tom 07.04.2016 / 11:39

2 respostas

2

Você deve ser capaz de fazer um script de várias linhas, por exemplo,

ExecStart=/bin/bash -c '\
   source /opt/environmentname/bin/activate environmentname; \
   exec /var/programname/programname -f /etc/programname/programconfig.conf'
    
por 07.04.2016 / 12:32
1

Para entender isso ... o ExecStart depende do ambiente definido por esse comando? Como essas linhas não são realmente executadas no mesmo shell, você não pode esperar que elas compartilhem o ambiente. O que você precisa é usar a palavra-chave Environment no arquivo da unidade. Dessa forma, o ExecStart irá obter o ambiente definido pelo seu arquivo.

link

    
por 07.04.2016 / 11:47