¿Cómo depuro un trabajo advenedizo?

10

Tengo el siguiente trabajo en /etc/init/collector:

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

expect daemon

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

Cuando comienzo el trabajo sudo service collector start, se cuelga. Si yo ctrl-cy corro initctl list, veo esto:

collector start/killed, process 616

No puedo ver una instancia del twistddemonio en ps, y el servidor HTTP que se supone que está proporcionando no existe.

Incluso intenté esto sin 'esperar demonio' ​​y con una simple llamada a un script bash de una línea usando una scriptestrofa, y todavía no funciona. Creo que estoy haciendo algo muy mal. ¿Qué podría ser?

Cera
fuente
No hay respuesta, pero estoy luchando con un problema similar. Incluso podría ser un error en Upstart: bugs.launchpad.net/ubuntu/+source/upstart/+bug/438313 . No sé cómo salir de este estado de suspensión más allá del reinicio. También creo que tiene que ver con la expect daemonlínea.
daños

Respuestas:

14

Puede redirigir stdouty stderrde todo el shell utilizando el scriptpragma (en lugar de exec) junto con exec >FILE 2>&1, de esta manera:

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

Con suerte, eso debería darle una mejor idea de lo que está sucediendo. He encontrado esto útil para detectar todo tipo de problemas en mis secuencias de comandos iniciales. Usted podría tubería de su comando de stdout/ stderrdirectamente, pero se perderá en los errores originarios de la concha (como errores de sintaxis).

Por otro lado, si serviceestá colgando, es posible que ni siquiera esté golpeando su script, en cuyo caso nada de esto ayudará, por supuesto.

Charles
fuente
Gracias, esto me puso en el camino correcto. Al final canalicé la salida a logger, para poder simplemente seguir /var/log/syslog.
Cera
Además, se muestran errores en el archivo conf dmesg. Descubrí esto después de no obtener ningún resultado al usar lo anterior. Había cometido un error tipográfico en la directiva chdir.
codingFoo
¿Dónde pones ese código?
kev
2

También está el console logdeclarativo, como se define aquí: http://upstart.ubuntu.com/cookbook/#console-log

No sé lo suficiente sobre el arranque para saber si está habilitado de forma predeterminada, pero puede habilitarlo para cada trabajo de arranque, de forma predeterminada se enviará a /var/log/upstart/<job>.log

Ehtesh Choudhury
fuente
0

Valide que exista el director advenedizo y agregue el registro de la consola antes de la fase de script. (en la versión inicial superior a 1.4 es el valor predeterminado)

registro de consola

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

Para obtener más información, consulte el hilo: /ubuntu/207143/how-to-diagnose-upstart-errors/932155#932155

zachlaniado
fuente