Comment lire ensuite les messages d'arrêt?

18

J'utilise Lubuntu 11.10. Chaque fois que je ferme, je peux lire FAIL en lettres rouges, mais je ne peux pas lire plus.

Alors, comment lire les messages du journal et essayer de résoudre le problème?

Sigur
la source
Jetez un œil à cette réponse sur askubuntu. Cela peut vous aider à résoudre votre problème.
solde9
tout a été enregistré à, /var/log/sysloget /var/log/messages, vous devez donc les lire et lancer la discussion. Vous pouvez utiliser io redirectionavec error redirectionquand vous utilisezshutdown command
PersianGulf

Réponses:

14

Il semble qu'il n'y ait aucun moyen de consigner ces données dans un fichier. Pour le processus de démarrage, il y a le bootlogdpackage qui crée le fichier /var/log/boot, mais rien pour le processus d'arrêt / redémarrage. Pour autant que je puisse voir, il n'y a aucun moyen de se connecter avec rsyslog, et même s'il y en avait, il y a des messages imprimés après l' rsyslogarrêt. Une partie de mon processus d'arrêt / redémarrage consiste à remonter les rootfs en lecture seule et à démonter tout le reste, après cette journalisation dans un fichier qui sera toujours là au prochain démarrage est pratiquement impossible.

La façon la plus simple que je peux voir pour afficher les messages est d'éditer les scripts /etc/init.d/haltet / ou de /etc/init.d/rebootfaire une pause juste avant le halt/ reboot. Pour le haltscript, exécutez la commande sudoedit /etc/init.d/halt(ou utilisez un éditeur d'interface graphique) et recherchez la ligne qui fait l'arrêt réel. Pour moi, c'est la ligne:

halt -d -f $netdown $poweroff $hddown

Sinon, cela devrait être à la fin de la do_stopfonction et la seule ligne qui appelle la haltcommande. Une fois que vous avez trouvé la ligne, insérez simplement une nouvelle ligne ci-dessus avec ce qui suit:

read -p "Press enter to halt" reply

Enregistrez le fichier et quittez. Maintenant, lorsque vous arrêtez, le système se met en pause jusqu'à ce que vous appuyiez sur Entrée (ou CTRL-C, CTRL-D, etc.). Vous pouvez lire les messages imprimés à l'écran. S'il y a plus d'un seul écran de texte, vous pouvez voir le défilement du terminal en appuyant sur Shift+PgUp. Si cela ne suffit toujours pas, il existe des moyens d'augmenter la taille du tampon de défilement (peut-être une question différente cependant).

Pour faire de même au redémarrage du système, vous devez modifier le /etc/init.d/rebootfichier. La commande utilisée ici est bien sûr rebootpar opposition à haltet devrait être à nouveau à la fin de la do_stopfonction. Pour moi, la ligne est:

reboot -d -f -i

Encore une fois, insérez simplement ce qui suit sur une nouvelle ligne ci-dessus:

read -p "Press enter to reboot" reply

Notez également que ces fichiers sont répertoriés comme des conffiles pour le initscriptspackage. Ces modifications ne seront pas détruites par défaut lorsque les packages sont mis à niveau, bien qu'elles provoquent un conflit.


Une solution plus complète serait d'utiliser le script suivant:

#! /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

Celui-ci doit être placé dans /etc/init.d/pause_hooket peut être activé pour s'exécuter à l'arrêt / redémarrage avec la commande suivante:

sudo update-rc.d pause_hook defaults

Pour activer ensuite le hook réel, créez les fichiers /etc/pause_hook.confcontenant la ligne:

PAUSE_HOOK_ENABLED=true

Le processus d'arrêt / redémarrage doit maintenant s'arrêter juste avant l' appel du script haltou reboot, ce qui donne le temps de visualiser les messages. Il peut également être facilement désactivé / réactivé en commentant / décommmentant la ligne d'activation /etc/pause_hook.conf. Il n'y aura également aucun dpkgconflit de conffile lors des mises à niveau de cette façon.

Graeme
la source
Une très jolie solution, en particulier le script init.
Mikhail Morfikov
4

La solution la plus simple pourrait être d'essayer de prendre une vidéo au lieu d'une photo. Vous pouvez le parcourir image par image ultérieurement.

Jim Paris
la source
2
Je ne peux pas croire qu'il n'y ait aucun fichier avec ces messages enregistrés !!! Je vais essayer d'enregistrer par vidéo.
Sigur
7
Certains de ces messages sont imprimés une fois les systèmes de fichiers démontés! Ils ne peuvent donc pas tous se retrouver dans un fichier.
Jim Paris
4

Voir le journal en temps réel

J'ai constaté que pendant l'arrêt, il y a généralement un logo Ubuntu et des voyants clignotants, qui sont affichés à la place d'un journal du processus d'arrêt. S'il y a des erreurs, elles sont en quelque sorte affichées, mais en désordre. Cependant, lors de l'arrêt, si j'appuie sur la touche Windows et sur r( Metar), je vois le succès et l'échec des services système, au fur et à mesure qu'ils se produisent. Alors je sais exactement ce qui est cassé. Aucune idée si ce raccourci clavier est spécifique à ma configuration Kubuntu ou quoi; Je ne l'ai pas ajouté .. Un de ceux que j'ai trouvé par accident, en quelque sorte ...

Affichage des journaux après le redémarrage

Lorsque le système est redémarré, les messages d'erreur doivent être enregistrés dans un fichier journal. Le fichier journal dépend du service défectueux / mal configuré. Le journal correspondant se trouvera presque certainement dans /var/log/(ou un sous-répertoire de celui-ci). ls, less, grepEt findont été les seuls programmes que j'ai besoin pour trouver des messages d'erreur dans les journaux ...

Une fois que vous avez trouvé l'erreur et le service qui l'a provoquée, vous ne devriez pas avoir besoin de redémarrer pour tester la nouvelle configuration; redémarrez simplement le service. J'espère que vous pourrez tester la configuration fixe avec une commande comme:

sudo service <service name> restart

Alex Leach
la source
Est-ce Windows + r ou Alt + r que vous appuyez? Les mappages par défaut mappent la clé Windows sur super et la clé méta sur alt, de sorte que la clé que vous décrivez n'est pas claire.
casey
3

Après avoir examiné la façon dont bootlogdparvient réellement à effectuer la journalisation, il s'avère qu'il peut être persuadé de consigner le processus d'arrêt / redémarrage ainsi que celui de démarrage. bootlogdest démarré au début du processus de démarrage. Il fait ensuite un peu de magie avec les périphériques ttyet ptspour enregistrer toutes les sorties sur le terminal auquel il est connecté. Il est ensuite arrêté plus tard dans le processus de démarrage, probablement avant qu'il ne commence à enregistrer la sortie d'un utilisateur travaillant sur le tty.

Si bootlogdest redémarré pendant le processus d'arrêt / redémarrage et arrêté avant que le système de fichiers contenant le journal ne soit démonté, il y aura un enregistrement de la plupart du processus d'arrêt disponible pour lecture au prochain démarrage.

bootlogdparvient à être à la fois démarré et arrêté pendant le démarrage en ayant deux initscripts. L'un est un initscript normal qui démarre / arrête le processus normalement. L'autre est un initscript «inversé» en ce que lorsqu'il est appelé avec start, il appelle le premier script avec stop. Cela «trompe» le sysvinitprocessus, il semble qu'il démarre deux services distincts lorsqu'il démarre et arrête vraiment le même service. Cela est nécessaire pour s'assurer que tout se passe dans le bon ordre.

Pour faire bootlogdfonctionner pendant l'arrêt, ce qui est requis est:

  1. Installez bootlogdsi vous ne l'avez pas déjà fait.
  2. Copiez les deux scripts d'initialisation
  3. Arrêtez le changement de script «inversé» pour commencer au lieu de commencer pour arrêter.
  4. Modifiez les en-têtes LSB afin que les deux scripts s'exécutent au bon moment pendant l'arrêt / le redémarrage
  5. Installez-les avec update-rc.d.

Voici mes modifications en tant que bashscript copier / coller (si vous souhaitez effectuer les modifications manuellement, les en-têtes LSB que j'ai utilisés sont dans le patch):

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

Tous les messages qui apparaissent avant l' bootlogdarrêt sont stockés dans /var/log/boot. bootlogdsupprime les caractères d'échappement du flux de texte. La bashcommande suivante ( ) affiche la couleur du journal, telle qu'elle apparaît lors de l'arrêt:

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

Voir cette question pour plus de détails à ce sujet - /programming/10757823/display-file-with-escaped-color-codes-boot-messages-from-bootlog-daemon/19011140

L'emplacement du journal peut être modifié en modifiant davantage les scripts. Malheureusement , toutes les apparences du fichier doit être modifié (aussi, en remplacement /ver/log/bootne suffit pas que le script fait un cdpour /var/logà un moment donné).

Ce qui précède ne fonctionnera également que s'il se /var/logtrouve sur les rootfs. Si ce n'est pas le cas, les dépendances doivent être retravaillées pour que cela umountfsse fasse après l' bootlogdarrêt. Ou bien connectez-vous à un fichier sur les rootfs.

Graeme
la source
1

Vous devez modifier tous les fichiers /etc/rc6.d/* et rediriger leur sortie vers un fichier que vous pourrez lire plus tard.

Cette redirection vous indiquera également quel programme failedet why.

De plus, vous devez modifier le start-stop-daemonen supprimant le --quietparamètre et en ajoutant le -vparamètre dans tous ces fichiers.

Si vous le faites, assurez-vous que vous annulerez toutes les modifications que vous avez apportées. La sauvegarde des fichiers existants avant d'apporter des modifications sera une bonne idée.

SHW
la source
D'ACCORD. Cela me demandera beaucoup de travail. J'essaierai. Merci.
Sigur
Faites-moi savoir le résultat alors
SHW
L'édition de sripts /etc/init.d(tout dans les /etc/rc?.dliens vers ici) ne fera rien. La sortie n'est pas directe, c'est à travers les fonctions /lib/lsb/init-functionset autres fichiers qu'elle source à son tour. Vous pouvez les modifier, mais certaines mises à niveau compliqueraient les changements.
Graeme
La seule fonction ou binaire qui est pertinente est celle start-stop-daemondes PO PoV. En attente de sa réponse
SHW
@SHW Non, regardez les scripts. La plupart des résultats proviennent d'autres parties du script. Je ne pense pas que cela start-stop-daemonproduise de sortie, du moins pas normalement. Les scripts génèrent une sortie ok / fail en fonction de sa sortie de retour en utilisant log_end_msg. Tu vois /lib/lsb/init-functions.d/20-left-info-blocks.
Graeme
0

/var/log/messagesvous donnera les données dont vous avez besoin. si cela ne vous suffit pas, modifiez /etc/syslog.confpour consigner toutes les données (je chercherais à activer la journalisation des erreurs du noyau, alias * kern) mais RÉINVERSEZ-LA après le redémarrage, ou cela consommera beaucoup d'espace pour les journaux

Kaboom
la source
Il n'y en a pas /etc/syslog.conf. Il y en a seulement sysctl.conf sysctl.d/ systemd/.
Sigur
1
essayez /etc/rsyslog.conf
kaboom
0

Pour mon ordinateur portable sudo halt, le logiciel s'arrêtera et non le matériel. c'est-à-dire que l'écran et le reste du matériel fonctionnent Le dernier message à l'écran sera

Système est arrêté

À ce stade, j'appuie simplement sur le bouton d'alimentation et tout est éteint. Vous pouvez essayer ça. Vous pouvez également essayersudo halt --verbose

totti
la source
Je suppose donc que c'est un processus totalement sûr. Aucun dommage au matériel?!
Sigur
0

Comme l'a dit Graeme, avec un système de fichiers ro ou démonté, klogd tué, il n'y a aucun moyen d'écrire de telles informations dans un fichier. Une solution peut utiliser une console (port série), définie dans les bootargs. Connectez simplement un câble null modem et un autre PC (tablette ou smartphone avec adaptateur approprié) et un émulateur de terminal.

fiche
la source
-1

Les messages d'erreur (et autres) sont généralement masqués par plymouthpour des raisons esthétiques.

Peut-être que cela aide: Si vous appuyez sur ESC pendant l'arrêt, plymouthaffiche la console graphique. Cela vous montre-t-il des messages utiles?

En dehors de cela, vous ne pouvez pas faire grand-chose si la machine tombe en panne car elle peut ne pas être en mesure d'écrire le fichier journal - qu'il soit mis en mémoire tampon ou qu'il /var/logsoit déjà remonté en lecture seule, selon le moment où le crash se produit. Vous pouvez consulter ces fichiers en exécutant ls -ltr /var/loget en recherchant s'il existe un fichier journal qui correspond à votre date d'arrêt (ou plus récent).

Robert Dinse
la source