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.
¡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:
¿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:
Instala bootlogdsi aún no lo has hecho.
Copie los dos guiones de inicio
Haga que el cambio de script 'invertido' pare para comenzar en lugar de comenzar para detener.
Modifique los encabezados LSB para que ambos scripts se ejecuten en los momentos correctos durante el apagado / reinicio
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
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.
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.
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
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
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.
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).
/var/log/syslog
y/var/log/messages
, por lo que debe leerlos y solucionar el problema. Puede usario redirection
conerror redirection
cuando usashutdown command
Respuestas:
Parece que no hay forma de registrar estos datos en un archivo. Para el proceso de arranque, existe el
bootlogd
paquete 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ónrsyslog
, e incluso si lo hubiera, hay mensajes impresos después de quersyslog
se 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/halt
y / o/etc/init.d/reboot
secuencias de comandos para hacer una pausa justo antes de la realhalt
/reboot
. Para elhalt
script, ejecute el comandosudoedit /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:De lo contrario, debe estar al final de la
do_stop
función y la única línea que llama alhalt
comando. Una vez que encuentre la línea, simplemente inserte una nueva línea arriba con lo siguiente: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/reboot
archivo. El comando utilizado aquí es, por supuestoreboot
, opuestohalt
y debería estar nuevamente al final de lado_stop
función. Para mí la línea es:Nuevamente solo inserte lo siguiente en una nueva línea arriba:
Tenga en cuenta también que estos archivos están listados como conffiles para el
initscripts
paquete. 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:
Esto debe colocarse
/etc/init.d/pause_hook
y puede habilitarse para ejecutarse al apagar / reiniciar con el siguiente comando:Para habilitar el enlace real, cree los archivos que
/etc/pause_hook.conf
contienen la línea:El proceso de apagado / reinicio ahora debería detenerse justo antes de que se llame al script
halt
oreboot
, 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ádpkg
conflictos de conflicto durante las actualizaciones de esta manera.fuente
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.
fuente
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
,grep
Yfind
han 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
fuente
Después de analizar cómo se las
bootlogd
arregla para hacer el registro, resulta que se puede persuadir para que registre el proceso de apagado / reinicio, así como el inicio.bootlogd
se inicia temprano en el proceso de arranque. Luego hace algo de magia contty
ypts
dispositivos 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 eltty
.Si
bootlogd
se 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.bootlogd
se las arregla para iniciarse y detenerse durante el inicio al tener dosinit
scripts. Uno es uninit
script normal que inicia / detiene el proceso normalmente. El otro es uninit
script 'invertido' en el que cuando se llama constart
, llama al primer script con stop. Esto 'engaña' elsysvinit
proceso, 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
bootlogd
ejecutar durante el apagado, lo que se requiere es:bootlogd
si aún no lo has hecho.update-rc.d
.Aquí están mis cambios como una
bash
secuencia de comandos copiar / pegar (si desea realizar los cambios manualmente, los encabezados LSB que he usado están en el parche):Todos los mensajes que aparecen antes de
bootlogd
detenerse se almacenarán en/var/log/boot
.bootlogd
elimina los caracteres de escape de la secuencia de texto. El siguientebash
comando ( ) mostrará el color del registro, tal como aparece durante el apagado: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/boot
no es suficiente ya que el script hace uncd
a/var/log
en un punto).Lo anterior también solo funcionará si
/var/log
está en rootfs. Si no, las dependencias deben ser modificadas para queumountfs
se haga después de quebootlogd
se detenga. O bien, inicie sesión en un archivo en rootfs.fuente
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
failed
y quéwhy
.Además, debe modificar el parámetro
start-stop-daemon
eliminando--quiet
y agregando-v
pará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.
fuente
/etc/init.d
(todo en/etc/rc?.d
enlaces aquí) no hará nada. La salida no es directa, es a través de las funciones en/lib/lsb/init-functions
y otros archivos que a su vez las fuentes. Podrías editarlos, aunque algunas actualizaciones podrían alterar los cambios.start-stop-daemon
de OP PoV. Ahora esperando su respuestastart-stop-daemon
produzca ningún resultado, al menos no normalmente. Los scripts generan resultados ok / fail basados en su salida de retorno usandolog_end_msg
. Ver/lib/lsb/init-functions.d/20-left-info-blocks
./var/log/messages
le dará los datos que necesita. si no es suficiente para usted, modifíquelo/etc/syslog.conf
para 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 registrosfuente
/etc/syslog.conf
. Solo haysysctl.conf sysctl.d/ systemd/
.Para mi computadora portátil se
sudo halt
apagará el software, no el hardware. es decir, la pantalla y otro hardware siguen funcionando. El último mensaje en la pantalla seráEn este punto, solo presiono el botón de Encendido y todo está apagado. Puedes probar esto. También puedes intentar
sudo halt --verbose
fuente
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.
fuente
Los mensajes de error (y otros) generalmente están ocultos por
plymouth
razones estéticas.Quizás esto ayude: si presiona ESC durante el apagado,
plymouth
muestra 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/log
que ya esté montado de solo lectura, dependiendo de cuándo ocurra el bloqueo. Puede echar un vistazo a estos archivos ejecutandols -ltr /var/log
y mirando si hay un archivo de registro que coincida con su fecha de cierre (o más reciente).fuente