Come eseguire il debug di unità di sistema ExecStart


12

Sono curioso di sapere se posso stampare la ExecStart/ExecStopriga di comando completamente espansa . Prendi in considerazione il seguente esempio:

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

Sto avendo linee di comando abbastanza lunghe con molte variabili d'ambiente coinvolte. Se alcune delle variabili si sbagliano (ad esempio con la configurazione drop-in), il servizio potrebbe non avviarsi affatto. Tuttavia non vedo la linea completamente espansa con gli envs sostituiti da nessuna parte e faccio fatica a scoprire cosa c'è che non va.

Non ho avuto fortuna a cercare su Google questo e finora l'unica possibilità che ho trovato è di modificare il file di unità da eseguire /usr/bin/echoinvece del servizio stesso. Ma è un po 'noioso. O una soluzione ancora più noiosa: controlla una per una ogni variabile d'ambiente.

Esiste un modo per forzare Systemd a mostrarmi cosa si sta effettivamente tentando di eseguire?

Risposte:


9

Purtroppo non esiste un modo integrato. Per vedere ExecStart finale puoi attivare il debug. Modificare il file /etc/systemd/system.confe impostare l' LogLevel=a debug. Quindi vedrai qualcosa di simile:

java.service About to execute: /usr/bin/java $OPTS_COMMON...Questo non risolve il problema ma è bene vedere la sostituzione dello specificatore del systemd. https://www.freedesktop.org/software/systemd/man/systemd.unit.html(specifiers)

Ma se vuoi davvero arrivare alla fine della sostituzione dell'argomento devi guardare qui: https://github.com/systemd/systemd/blob/7ce9cc154576e342015eab8c1500790a9ededc01/src/core/execute.c#L2570


Avevo un po 'paura che non ci fosse modo di farlo. :/ Grazie comunque.
pistole,

2

Nel file * .service nella sezione [Servizio]

ExecStartPre=/bin/bash -l -c 'echo "$OPTS_COMMON">/tmp/options.debug'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.