Come posso eseguire il debug degli script Upstart?


67

Per qualche motivo sto ricevendo un errore durante gli aggiornamenti apport , la cui causa è

% sudo service apport start
start: Job failed to start

Con sysvinit, potrei eseguire il debug di questo tipo di problema eseguendo ad es

sudo sh -x /etc/init.d/whatever start

ma questo non sembra mappare su Upstart. Cosa dovrei provare dopo?

Si scopre che esiste una soluzione alternativa che consentirà all'installazione di procedere. Ma sono ancora interessato alla domanda generale su come si traccerebbe la sceneggiatura.


1
Sto lavorando a una risposta più approfondita, ma grazie per il collegamento alla soluzione alternativa, oggi mi è successa la stessa cosa aggiornando sdolcinata!
Mark Russell,

Haha, e hanno rilasciato la correzione 12 minuti fa. La beta non è divertente? (no davvero!)
Mark Russell,

+ Muhammad ha pubblicato la risposta corretta di seguito.
Travis Reeder,

Ho trovato utili informazioni di debug in /var/log/syslog.
Matt

Risposte:


29

Tutte le seguenti informazioni (e un aiuto Upstart molto più utile) provengono da The Upstart Cookbook . La sezione 18 tratta del debug. http://upstart.ubuntu.com/cookbook/#debugging

In questo caso specifico di traccia di una stanza "script" di un processo Upstart, è necessario aggiungere le seguenti righe proprio sotto la parola "script":

exec 2>>/dev/.initramfs/myjob.log
set -x

Il motivo della posizione dispari è che /dev/.initramfs/ è disponibile in avvio molto presto, prima che il file system radice sia stato caricato e continui a essere disponibile dopo l'avvio. Sto indovinando con apport, tuttavia, probabilmente non è necessario utilizzare quel percorso. Comunque, è bello sapere l'opzione.

Va inoltre notato che tutti gli script vengono eseguiti con set -equalsiasi comando non riuscito uscirà completamente dallo script. Il che ha senso, come si dovrebbe fare molta attenzione quando si eseguono script come root.

Consiglio vivamente di consultare il ricettario Upstart collegato in precedenza in generale per chiunque lavori con lavori Upstart.


Grazie per questo, se non avessi visto il bug risolto, probabilmente avrei modificato lo script per attivarlo set -xcome suggerisci. Per lo più mi chiedevo se ci fosse un modo più pulito per farlo.
poolie,

Sì, non che io sappia (e se non è nel libro di cucina, ciò significa che probabilmente non lo è). A parte quell'idea, la maggior parte delle tecniche di debug menzionate riguarda maggiormente la risoluzione degli stessi eventi Upstart e Upstart, che è dove mi trovo di solito. :)
Mark Russell,

Eppure questo metodo fallirà se setuide setgidviene utilizzato nei lavori.
0xC0000022L

/dev/.initramfs non è sempre presente. Ho appena incontrato una macchina che non ha questo percorso.
Sarge Borsch,

110

Upstart registra l'esecuzione del servizio in un file di registro con lo stesso nome in /var/log/upstart/your-service-name.log. Dovrebbe essere utile.


2
Bene, sembra che questo includa lo stderr dei lavori, quindi se lo avessi acceso set -xprobabilmente sarebbe apparso lì.
Poolie,

1
Ho inserito un'istruzione di registro basata sull'eco nel mio script /etc/init.d/Xservice ma non viene visualizzato in questa posizione! Sistema operativo: Ubuntu 14.04 Trusty
Champ

Perché non fare il syslog? Posso suggerire una funzionalità generale, forse rsyslog stesso, che upstart e qualsiasi componente userebbero per scrivere su syslog se non è disponibile, o in un posto temporaneo che verrebbe trasferito a syslog al più presto. Mi ci è voluta mezza giornata per trovare questo. Si prega di inoltrare questa osservazione TIA.
Papou,

4
Questo sembra non essere più vero nel 16.04, apparentemente almeno dal 15.10: gli ultimi file in quella directory sono datati prima della versione 15.10.
MGF

1
@FGM questo perché 16.04 non utilizza più l'avvio, usa systemd. I registri sono accessibili conjournalctl
Jeremy il
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.