37 votos

El registro de un Demonio de la Salida con Upstart

Tengo la costumbre de tener un demonio que es administrado por el advenedizo en mi Ubuntu server. Funciona perfectamente, excepto que necesito para capturar (registro) el demonio de la salida. El oficial estrofas de la página dice que puedo usar console logged para hacer esto, pero ¿qué archivo no se registro?

También he leído que console logged es ya no es válida una estrofa. Actualmente estoy usando 0.3.9 (Hardy), pero va a actualizar a 0.6.x (Lucid) en un par de meses. Si console logged , de hecho, no funciona con las versiones posteriores, ¿qué puedo usar en su lugar?

36voto

Keith Rarick Puntos 311

Este fragmento nos tubería de la salida de su servicio en el logger, mientras que todavía permite que usted exec el proceso de servicio (reemplazando así el proceso de shell) así que upstart no confundirse. También hace asegúrese de que el registrador de proceso se cambian de padre a iniciar, por lo tanto no es un niño de su servicio, y evita dejando el resto sentados en el sistema de ficheros, incluso a pesar de que necesita para crear un fifo temporalmente.

script
  mkfifo /tmp/myservice-log-fifo
  ( logger -t myservice </tmp/myservice-log-fifo & )
  exec >/tmp/myservice-log-fifo
  rm /tmp/myservice-log-fifo
  exec myservice 2>/dev/null
end script

He aquí cómo funciona:

  1. mkfifo /tmp/myservice-log-fifo simplemente hace que el fichero especial fifo (también conocido como la canalización con nombre). Tipo man 7 fifo para más información.
  2. ( logger ... </tmp/myservice-log-fifo & ) comienza registrador de la lectura de la fifo, en el fondo. El paréntesis causa el registrador de proceso que se cambian de padre a init, en lugar de seguir siendo un niño de la shell actual proceso.
  3. exec >/tmp/myservice-log-fifo redirecciones en el shell actual del stdout a la fifo. Ahora hemos abierto un descriptor de archivo para que fifo, y que en realidad no necesitan el sistema de ficheros de entrada más...
  4. rm /tmp/myservice-log-fifo así que vamos a quitar.
  5. exec myservice 2>/dev/null simplemente ejecuta el servicio en la forma habitual. Stdout ya va para el fifo, y que no va a cambiar cuando el nuevo programa se ejecuta.

ACTUALIZACIÓN: set -e , no es necesario, como Upstart ejecuta secuencias de comandos con esta opción por defecto (ver http://upstart.ubuntu.com/cookbook/#develop-scripts-using-bin-sh)

32voto

inazaruk Puntos 37760

Para las últimas versiones de Ubuntu (12.04+), simplemente uso

console log

Y el demonio de salida (STDOUT Y STDERR) se anexará /var/log/upstart/<service>.log

http://upstart.ubuntu.com/cookbook/#console-log

11voto

Peter Mounce Puntos 506

Si utiliza el console output estrofay, a continuación, tubo su salida del guión a logger (el shell de comandos de la interfaz para el syslog(3) sistema de registro de módulo), a continuación, que va a funcionar.

Por ejemplo

console output
exec /my/script | logger

se registro a /var/log/messages

Por ejemplo

console output
exec /my/script | logger -t my-script

se registro a /var/log/messages y la etiqueta de cada mensaje con my-script

logger --help para el registrador de opciones de uso.

(Yo estoy en la AMI de Amazon Linux, que es Centos 5.x; YMMV)

6voto

Jorge Vargas Puntos 181

Esta es feo, pero es hasta ahora el mejor que he encontrado

exec /ruta/a/server >> /tmp/upstart.log 2>&1

3voto

Nikratio Puntos 365

También puede redirigir la salida a syslog, por ejemplo,

exec $SERVER 2>&1 | logger -t myservice -p local0.info

Sin embargo, la tubería puede causar advenedizo confundir el PID del proceso de registro con el PID del demonio.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: