Come eseguire il debug di un processo di avvio?


10

Ho il seguente lavoro in /etc/init/collector:

start on runlevel [2345]
stop on runlevel [!2345]

expect daemon

exec /usr/bin/twistd -y /path/to/my/tac/file

Quando inizio il lavoro con sudo service collector start, si blocca. Se io ctrl-ce corro initctl list, vedo questo:

collector start/killed, process 616

Non riesco a vedere un'istanza del twistddemone in ps, e il server HTTP che dovrebbe fornire non esiste.

Ho anche provato questo senza "aspettarsi un demone" e con una semplice chiamata a uno script bash a una riga usando una scriptstanza, e ancora non funziona. Penso che sto facendo qualcosa di molto sbagliato. Cosa potrebbe essere?


Nessuna risposta, ma sto lottando con un problema simile. Potrebbe anche essere un bug in Upstart: bugs.launchpad.net/ubuntu/+source/upstart/+bug/438313 Non so come ottenere da questo stato di sospensione diverso dal riavvio. Inoltre credo che abbia a che fare con la expect daemonlinea.
danneggiare il

Risposte:


14

Puoi reindirizzare stdoute stderrdell'intera shell usando il scriptpragma (anziché exec) insieme a exec >FILE 2>&1, in questo modo:

script
    exec >/path/to/some_log_file 2>&1
    exec your_command_here
end script

Speriamo che ciò ti dia una migliore visione di ciò che sta succedendo. L'ho trovato utile per rilevare tutti i tipi di problemi nei miei script upstart. È possibile reindirizzare il comando stdout/ stderrdirettamente, ma si perderanno errori originati nella shell (come errori di sintassi).

D'altra parte, se serviceè sospeso, potrebbe anche non colpire la tua sceneggiatura, nel qual caso nulla di tutto ciò aiuterà, ovviamente.


Grazie, questo mi ha messo sulla strada giusta. Alla fine ho reindirizzato l'output a logger, in modo da poter semplicemente fare la coda /var/log/syslog.
Cera,

Inoltre, vengono visualizzati gli errori nel file di configurazione stesso dmesg. L'ho scoperto dopo che non ottenevo alcun output quando utilizzavo quanto sopra. Avevo fatto un refuso nella direttiva chdir.
coding:

Dove metti quel codice?
kev


0

Convalida l'esistenza del direttore upstart e aggiungi il log della console prima della fase di script. (nella versione upstart superiore a 1.4 è l'impostazione predefinita)

registro della console

script exec> / path / to / some_log_file 2> & 1 exec your_command_here end script

Per ulteriori informazioni, controlla la discussione: /ubuntu/207143/how-to-diagnose-upstart-errors/932155#932155

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.