systemd - Dando ao meu serviço vários argumentos

38

É possível dar ao meu serviço systemd mais de um argumento?

Eu gostaria de executar um programa com vários argumentos que precisam ser decididos pelo usuário final.

Por exemplo: ./program arg1 arg2

Para iniciar um aplicativo de argumento único, eu precisaria de algo como systemctl start arg1@program , em que na definição de serviço eu tenho ExecStart = /usr/bin/program ℅i .

Obrigado!

    
por peperunas 14.03.2014 / 11:24

2 respostas

28

Sim, você pode! Defina-os em um arquivo em algum lugar e adicione-os a EnvironmentFile em seu serviço systemd. Por exemplo, digamos que o conteúdo de /etc/.progconf seja:

ARG1=-o
ARG2=--verbose

E o seu arquivo .service:

EnvironmentFile=/etc/.progconf
ExecStart = /usr/bin/prog $ARG1 $ARG2

Você pode escrever para esse arquivo se precisar alterá-lo em qualquer lugar. Um serviço não deve alterar suas opções com muita frequência, talvez considere iniciar automaticamente ou cron se você precisar fazer isso.

Para mais exemplos, verifique: link

    
por 14.03.2014 / 12:04
8

Eu queria fazer a mesma coisa, mas sem um arquivo separado para cada combinação de argumentos. Descobri que eu poderia passar um longo argumento com espaços e, em seguida, usar o recurso de divisão de espaço da variável de ambiente do systemd para separar os argumentos.

Eu fiz um serviço com o nome de arquivo [email protected] ( anote o trailing 'at sign', que é necessário quando um serviço recebe argumentos ).

[Unit]
Description=Test passing multiple arguments

[Service]
Environment="SCRIPT_ARGS=%I"
ExecStart=/tmp/test.py $SCRIPT_ARGS

Eu corro isso com sudo systemctl start argtest@"arg1 arg2 arg3".service e ele passa arg1 , arg2 e arg3 como argumentos de linha de comando separados para test.py.

    
por 03.01.2018 / 16:47

Tags