É 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
, onde na definição de serviço que tenho ExecStart = /usr/bin/program ℅i
.
Obrigado!
Respostas:
Sim você pode! Defina-os em um arquivo em algum lugar e adicione-os ao
EnvironmentFile
seu serviço systemd. Por exemplo, digamos que o conteúdo do /etc/.progconf seja:E seu arquivo .service:
Você pode gravar nesse arquivo se precisar alterá-los em movimento. 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: https://wiki.archlinux.org/index.php/Systemd/Services
fonte
VAR1=... VAR2=... systemctl start foobar.service
para passar as variáveis?PassEnvironment
diretiva, mas recebe variáveis dosystemd
processo (normalmente PID 1), não desystemctl
. As variáveis de ambiente dosystemctl
processo não são propagadas para o serviço que está sendo iniciado.Eu queria fazer a mesma coisa, mas sem um arquivo separado para cada combinação de argumentos. Descobri que podia passar um longo argumento com espaços e depois 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 nome de arquivo
[email protected]
( observe o sinal de arroba à direita, necessário quando um serviço recebe argumentos ).Eu corro isso com
sudo systemctl start argtest@"arg1 arg2 arg3".service
e ele passaarg1
,arg2
earg3
como argumentos separados da linha de comando para test.py.fonte
Wants=argtest@"arg1 arg2".service
e apenas o primeiro argumento foi aprovado.O mais fácil que encontrei é:
Mantém tudo independente.
Dito isto, descobri que pelo menos no Ubuntu 18.04 LTS, nem preciso fazer isso, posso fazer isso e funciona bem:
$vars
trabalhe como argumentos com esse padrão também.fonte