¿Cómo encontrar mensajes de error de los scripts de Linux init.d / rc.d?

28

En Linux, escribí algunos scripts para ejecutar durante el arranque y jugué con las diversas formas de instalarlos. Para scripts más grandes, pondré /etc/init.dy vincularé los /etc/rc.d/rc?.dniveles de ejecución apropiados . Para guiones más pequeños, agregaré /etc/rc.d/rc.local. Este proceso parece estar funcionando sin problemas.

Ahora he modificado uno de mis scripts y está fallando. Me está costando mucho diagnosticarlo porque parece que no puedo capturar la salida del error. He revisado /var/log/messagesy examinado el resto, /var/logpero no puedo encontrar nada útil.

Alguien sabe:

  1. ¿Se capturan automáticamente estos mensajes de error en alguna parte?
  2. si no, ¿cómo puedo capturar el stdout / stderr de mis scripts init.d?

Gracias por adelantado.

McKAMEY
fuente
Si va a una distribución más moderna con systemd, se encargará de eso y le permitirá registrar los mensajes de registro de cada servicio.
eckes

Respuestas:

17
  1. No, van a STDOUT (si lo usa echo) o STDERR (si lo usa echo >&2).

  2. Sus scripts tienen que escribir en registros y / o syslog por sí mismos (su distribución puede contener algunas funciones init.d que pueden ayudar allí; agregue su distribución a su pregunta).

Si buscas registros busca el teecomando. Si buscas syslog mira logger. Puedes combinarlos de la forma que quieras.

Nils
fuente
9

Escriba una secuencia de comandos de envoltura que llame a su secuencia de comandos y redirija la salida a un archivo

#!/bin/bash

    /path/to/your/script &>/path/to/logfile
user9517 es compatible con GoFundMonica
fuente
6

Podría hacer una función para hacer eco del mensaje tanto en la pantalla como en syslog, algo como esto:

LOGGER="/usr/bin/logger -t $myScript"    # check the location of logger for your system

myEcho () {
    echo "$1"
    $LOGGER "$1"
}

También puede poner eso en un archivo separado e incluirlo en sus scripts con

#!/bin/bash
myScript=$(basename $0)
[ -r /myFunctions/myecho ] && . /myFunctions/myecho
ott--
fuente
Gracias, esto está más cerca de lo que estaba buscando. Sé cómo redirigir las E / S pero no sabía cómo llamar al registrador.
McKAMEY
¿Es [ -r ... ]una prueba para verificar si existe?
McKAMEY
Sí, verifique si el archivo es legible.
ott--
5

Los mensajes de scripts de inicio generalmente no se capturan en ningún lado. Por lo tanto, debe implementar una forma de hacerlo usted mismo. Una buena idea es usar loggerpara enviar todos los resultados a syslog. Este ejemplo enviará stdout y stderr a syslog:

exec 1> >(logger -s -t $(basename $0)) 2>&1

Lo encontré en este gran artículo: http://urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/ .

qugu
fuente