¿Cómo leer los mensajes apagados después?

18

Estoy usando Lubuntu 11.10. Cada vez que cierro puedo leer FAIL en letras rojas, pero no puedo leer más.

Entonces, ¿cómo leer los mensajes de registro e intentar resolver el problema?

Sigur
fuente
Echa un vistazo a esta respuesta en askubuntu. Puede ayudarte con tu problema.
solde9
todo se recuperó en /var/log/syslogy /var/log/messages, por lo que debe leerlos y solucionar el problema. Puede usar io redirectioncon error redirectioncuando usashutdown command
PersianGulf

Respuestas:

14

Parece que no hay forma de registrar estos datos en un archivo. Para el proceso de arranque, existe el bootlogdpaquete que crea el archivo /var/log/boot, pero nada para el proceso de apagado / reinicio. Por lo que puedo ver, tampoco hay forma de iniciar sesión rsyslog, e incluso si lo hubiera, hay mensajes impresos después de que rsyslogse detiene. Parte de mi proceso de apagado / reinicio es volver a montar los rootfs de solo lectura y desmontar todo lo demás, después de que iniciar sesión en un archivo que todavía estará allí en el próximo arranque es prácticamente imposible.

La forma más sencilla que puedo ver para ver los mensajes es editar los /etc/init.d/halty / o /etc/init.d/rebootsecuencias de comandos para hacer una pausa justo antes de la real halt/ reboot. Para el haltscript, ejecute el comando sudoedit /etc/init.d/halt(o use un editor de GUI) y busque la línea que detiene realmente. Para mí esta es la línea:

halt -d -f $netdown $poweroff $hddown

De lo contrario, debe estar al final de la do_stopfunción y la única línea que llama al haltcomando. Una vez que encuentre la línea, simplemente inserte una nueva línea arriba con lo siguiente:

read -p "Press enter to halt" reply

Guarda el archivo y cierra. Ahora, cuando cierre, el sistema se detendrá hasta que presione Intro (o CTRL-C, CTRL-D, etc.). Puede leer los mensajes impresos en la pantalla. Si hay más de una pantalla llena de texto, puede ver el desplazamiento hacia atrás del terminal presionando Shift+PgUp. Si esto todavía no es suficiente, hay formas de aumentar el tamaño del búfer de desplazamiento (aunque quizás sea una pregunta diferente).

Para hacer lo mismo cuando se reinicia el sistema, debe editar el /etc/init.d/rebootarchivo. El comando utilizado aquí es, por supuesto reboot, opuesto halty debería estar nuevamente al final de la do_stopfunción. Para mí la línea es:

reboot -d -f -i

Nuevamente solo inserte lo siguiente en una nueva línea arriba:

read -p "Press enter to reboot" reply

Tenga en cuenta también que estos archivos están listados como conffiles para el initscriptspaquete. Estas ediciones no se bloquearán de forma predeterminada cuando se actualicen los paquetes, aunque causarán un conflicto.


Una solución más completa sería utilizar el siguiente script:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          pause_hook
# Required-Start:
# Required-Stop:     halt reboot
# Default-Start:
# Default-Stop:      0 6
# X-Stop-After:      umountroot
# X-Interactive:     true
# Short-Description: Pause before halt or reboot
# Description:
### END INIT INFO

do_stop () {
    [ -r /etc/pause_hook.conf ] && . /etc/pause_hook.conf

    [ "$PAUSE_HOOK_ENABLED" = true ] && read -p "Press enter to continue" reply
}

case "$1" in
    start)
        # No-op
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        do_stop
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

Esto debe colocarse /etc/init.d/pause_hooky puede habilitarse para ejecutarse al apagar / reiniciar con el siguiente comando:

sudo update-rc.d pause_hook defaults

Para habilitar el enlace real, cree los archivos que /etc/pause_hook.confcontienen la línea:

PAUSE_HOOK_ENABLED=true

El proceso de apagado / reinicio ahora debería detenerse justo antes de que se llame al script halto reboot, dando tiempo para ver los mensajes. También se puede deshabilitar / volver a habilitar fácilmente comentando / descomentando la línea de habilitación /etc/pause_hook.conf. Tampoco habrá dpkgconflictos de conflicto durante las actualizaciones de esta manera.

Graeme
fuente
Una solución bastante agradable, especialmente el guión de inicio.
Mikhail Morfikov
4

La solución más fácil podría ser tomar un video en lugar de una fotografía. Puede recorrerlo cuadro por cuadro más adelante.

Jim Paris
fuente
2
¡No puedo creer que no haya ningún archivo con esos mensajes grabados! Intentaré grabar por video.
Sigur
77
¡Algunos de esos mensajes se imprimen después de desmontar los sistemas de archivos! Por lo tanto, no todos pueden terminar en un archivo.
Jim Paris
4

Ver el registro en tiempo real

Descubrí que durante el apagado generalmente hay un logotipo de Ubuntu y luces intermitentes, que se muestran en lugar de un registro del proceso de apagado. Si hay errores, entonces se muestran, pero de manera desordenada. Sin embargo, al cerrar, si presiono la tecla de Windows y r( Metar), puedo ver el éxito y el fracaso de los servicios del sistema, a medida que ocurren. Entonces sé lo que está roto exactamente. No tengo idea de si este método abreviado de teclado es específico de mi configuración de Kubuntu o qué; No lo agregué ... Uno de esos que encontré por accidente, de alguna manera ...

Ver los registros después de reiniciar

Cuando se reinicia el sistema, los mensajes de error deben guardarse en un archivo de registro. Qué archivo de registro depende de qué servicio está roto / mal configurado. El registro relevante estará casi definitivamente en /var/log/(o un subdirectorio del mismo). ls, less, grepY findhan sido los únicos programas que he necesitado para encontrar mensajes de error en los registros de ...

Una vez que haya encontrado el error y el servicio que lo causó, entonces no debería necesitar reiniciar para probar la nueva configuración; simplemente reinicie el servicio. Espero que pueda probar la configuración fija con un comando como:

sudo service <service name> restart

Alex Leach
fuente
¿Está presionando Windows + r o Alt + r? Las asignaciones predeterminadas asignan la tecla de Windows a super y la tecla de meta a alt, por lo que no está claro exactamente qué tecla está describiendo.
casey
3

Después de analizar cómo se las bootlogdarregla para hacer el registro, resulta que se puede persuadir para que registre el proceso de apagado / reinicio, así como el inicio. bootlogdse inicia temprano en el proceso de arranque. Luego hace algo de magia con ttyy ptsdispositivos para registrar toda la salida en el terminal al que está conectado. Luego se detiene más tarde en el proceso de arranque, presumiblemente antes de que comience a registrar la salida de un usuario que trabaja en el tty.

Si bootlogdse vuelve a encender durante el proceso de apagado / reinicio y se detiene antes de desmontar cualquier sistema de archivos que contenga el registro, habrá un registro de la mayor parte del proceso de apagado disponible para leer en el próximo arranque.

bootlogdse las arregla para iniciarse y detenerse durante el inicio al tener dos initscripts. Uno es un initscript normal que inicia / detiene el proceso normalmente. El otro es un initscript 'invertido' en el que cuando se llama con start, llama al primer script con stop. Esto 'engaña' el sysvinitproceso, parece que está iniciando dos servicios separados cuando realmente está iniciando y deteniendo el mismo servicio. Esto es necesario para asegurarse de que todo suceda en el orden correcto.

Para bootlogdejecutar durante el apagado, lo que se requiere es:

  1. Instala bootlogdsi aún no lo has hecho.
  2. Copie los dos guiones de inicio
  3. Haga que el cambio de script 'invertido' pare para comenzar en lugar de comenzar para detener.
  4. Modifique los encabezados LSB para que ambos scripts se ejecuten en los momentos correctos durante el apagado / reinicio
  5. Instalarlos con update-rc.d.

Aquí están mis cambios como una bashsecuencia de comandos copiar / pegar (si desea realizar los cambios manualmente, los encabezados LSB que he usado están en el parche):

cd /etc/init.d
cp bootlogd shutdown-bootlogd
cp stop-bootlogd shutdown-start-bootlogd

echo -e 'diff -ur ./shutdown-bootlogd /etc/init.d/shutdown-bootlogd
--- ./shutdown-bootlogd\t2014-02-20 13:59:23.426109512 +0000
+++ /etc/init.d/shutdown-bootlogd\t2014-02-20 11:10:56.238656828 +0000
@@ -1,14 +1,13 @@
 #! /bin/sh
-### BEGIN INIT INFO
-# Provides:          bootlogd
-# Required-Start:    mountdevsubfs
-# X-Start-Before:    hostname keymap keyboard-setup procps pcmcia hwclock hwclockfirst hdparm hibernate-cleanup lvm2
-# Required-Stop:
-# Default-Start:     S
-# Default-Stop:
-# Short-Description: Start or stop bootlogd.
-# Description:       Starts or stops the bootlogd log program
-#                    which logs boot messages.
+### BEGIN INIT INFO 
+# Provides:          shutdown-bootlogd 
+# Required-Start:
+# Required-Stop:     umountroot halt reboot 
+# Default-Start:      
+# Default-Stop:      0 6 
+# X-Stop-After:      umountfs 
+# Short-Description: Stop bootlogd at shutdown. 
+# Description: 
 ### END INIT INFO

 PATH=/sbin:/bin  # No remote fs at start
diff -ur ./shutdown-start-bootlogd /etc/init.d/shutdown-start-bootlogd
--- ./shutdown-start-bootlogd\t2014-02-20 13:59:23.430107513 +0000
+++ /etc/init.d/shutdown-start-bootlogd\t2014-02-20 11:10:56.238656828 +0000
@@ -1,24 +1,24 @@
 #! /bin/sh
 ### BEGIN INIT INFO
-# Provides:          stop-bootlogd
-# Required-Start:    $local_fs $all
-# Required-Stop:
-# Default-Start:     2 3 4 5
-# Default-Stop:
-# Short-Description: Stop bootlogd
-# Description:       See the init.d/bootlogd script
+# Provides:          shutdown-start-bootlogd
+# Required-Start:
+# Required-Stop:     $local_fs $all
+# Default-Start:
+# Default-Stop:      0 6
+# Short-Description: Start or stop bootlogd at shutdown.
+# Description:
 ### END INIT INFO

-NAME=stop-bootlogd
+NAME=shutdown-start-bootlogd
 DAEMON=/sbin/bootlogd

 [ -x "$DAEMON" ] || exit 0

 case "$1" in
-  start)
-\t/etc/init.d/bootlogd stop
+  stop)
+\t/etc/init.d/bootlogd start
 \t;;
-  stop|restart|force-reload)
+  start|restart|force-reload)
 \t# No-op
 \t;;
   status)
' | patch

update-rc.d shutdown-bootlogd defaults
update-rc.d shutdown-start-bootlogd defaults

Todos los mensajes que aparecen antes de bootlogddetenerse se almacenarán en /var/log/boot. bootlogdelimina los caracteres de escape de la secuencia de texto. El siguiente bashcomando ( ) mostrará el color del registro, tal como aparece durante el apagado:

sed $'s/\^\[/\E/g;s/\[1G\[/\[27G\[/' /var/log/boot | less -r

Consulte esta pregunta para obtener más detalles al respecto: /programming/10757823/display-file-with-escaped-color-codes-boot-messages-from-bootlog-daemon/19011140

La ubicación del registro se puede cambiar editando más los scripts. Desafortunadamente, cada aspecto del archivo debe cambiarse (además, el reemplazo /ver/log/bootno es suficiente ya que el script hace un cda /var/logen un punto).

Lo anterior también solo funcionará si /var/logestá en rootfs. Si no, las dependencias deben ser modificadas para que umountfsse haga después de que bootlogdse detenga. O bien, inicie sesión en un archivo en rootfs.

Graeme
fuente
1

Debe editar todos los archivos /etc/rc6.d/* y redirigir su salida a algún archivo, que puede leer más adelante.

Esta redirección también te dirá qué programa failedy qué why.

Además, debe modificar el parámetro start-stop-daemoneliminando --quiety agregando -vparámetros en todos esos archivos.

Si lo está haciendo, asegúrese de revertir todos los cambios realizados. Hacer una copia de seguridad de los archivos existentes antes de realizar cambios será una buena idea.

SHW
fuente
OKAY. Esto requerirá mucho trabajo de mi parte. Lo intentaré. Gracias.
Sigur
Déjame saber el resultado entonces
SHW
Editar sripts en /etc/init.d(todo en /etc/rc?.denlaces aquí) no hará nada. La salida no es directa, es a través de las funciones en /lib/lsb/init-functionsy otros archivos que a su vez las fuentes. Podrías editarlos, aunque algunas actualizaciones podrían alterar los cambios.
Graeme
La única función o binario que es relevante, es start-stop-daemonde OP PoV. Ahora esperando su respuesta
SHW
@SHW No, mira los guiones. La mayor parte de la salida proviene de otras partes del script. No creo que start-stop-daemonproduzca ningún resultado, al menos no normalmente. Los scripts generan resultados ok / fail basados ​​en su salida de retorno usando log_end_msg. Ver /lib/lsb/init-functions.d/20-left-info-blocks.
Graeme
0

/var/log/messagesle dará los datos que necesita. si no es suficiente para usted, modifíquelo /etc/syslog.confpara registrar todos los datos (buscaría habilitar el registro de errores del kernel, también conocido como * kern ), pero REVÍTELO DE NUEVO después de reiniciar, o consumirá mucho espacio para los registros

kaboom
fuente
No existe /etc/syslog.conf. Solo hay sysctl.conf sysctl.d/ systemd/.
Sigur
1
pruebe /etc/rsyslog.conf
kaboom
0

Para mi computadora portátil se sudo haltapagará el software, no el hardware. es decir, la pantalla y otro hardware siguen funcionando. El último mensaje en la pantalla será

El sistema se detuvo

En este punto, solo presiono el botón de Encendido y todo está apagado. Puedes probar esto. También puedes intentarsudo halt --verbose

totti
fuente
Así que supongo que este es un proceso totalmente seguro. ¿Ningún daño al hardware?
Sigur
0

Como dijo Graeme, con ro o sistema de archivos desmontado, matado a klogd no hay forma de escribir esa información en un archivo. Una solución puede estar usando una consola (puerto serie), definida en bootargs. Simplemente conecte el cable de módem nulo y otra PC (tableta o teléfono inteligente con el adaptador apropiado) y el emulador de terminal.

Fich
fuente
-1

Los mensajes de error (y otros) generalmente están ocultos por plymouthrazones estéticas.

Quizás esto ayude: si presiona ESC durante el apagado, plymouthmuestra la consola gráfica. ¿Eso te muestra mensajes útiles?

Aparte de eso, es poco lo que puede hacer si la máquina se bloquea porque es posible que no pueda escribir el archivo de registro, ya sea que esté almacenado en el búfer o /var/logque ya esté montado de solo lectura, dependiendo de cuándo ocurra el bloqueo. Puede echar un vistazo a estos archivos ejecutando ls -ltr /var/logy mirando si hay un archivo de registro que coincida con su fecha de cierre (o más reciente).

Robert Dinse
fuente