Como depurar a unidade do sistema ExecStart

6

Estou curioso para saber se posso imprimir a linha de comando ExecStart/ExecStop totalmente expandida. Considere o seguinte exemplo:

ExecStart=/usr/bin/java $OPTS_COMMON $OPTS $OPTS_LOG $OPTS_DEBUG some.class.Start --param1 ${PARAM1} --param2 ${PARAM2}

Estou tendo bastante longas linhas de comando com muitas variáveis de ambiente envolvidas. Se algumas das variáveis se tornarem erradas (por exemplo, por configuração drop-in), o serviço pode não iniciar de todo. No entanto, não vejo nenhuma linha totalmente expandida com envs substituídos em qualquer lugar e luto para descobrir o que está errado.

Eu não tive sorte pesquisando isso e até agora a única possibilidade que encontrei é modificar o arquivo de unidade para executar /usr/bin/echo em vez do próprio serviço. Mas isso é um pouco cansativo. Ou uma solução ainda mais irritante - verifique cada variável de ambiente uma a uma.

Existe alguma maneira de forçar o systemd a me mostrar o que realmente tentou ser executado?

    
por pystole 18.09.2016 / 18:36

2 respostas

5

Infelizmente, não há como construir. Para ver o ExecStart final, você pode ativar a depuração. Edite o arquivo /etc/systemd/system.conf e defina o LogLevel= para debug . Então você verá algo como:

java.service About to execute: /usr/bin/java $OPTS_COMMON... Isto não resolve o seu problema, mas é bom ver a substituição do especificador do systemd. link

Mas se você realmente quiser chegar ao fim da substituição de argumentos, é necessário verificar aqui: link

    
por 19.09.2016 / 10:19
1

No arquivo * .service na seção [Serviço]

ExecStartPre=/bin/bash -l -c 'echo "$OPTS_COMMON">/tmp/options.debug'
    
por 17.02.2017 / 02:11

Tags