web-dev-qa-db-fra.com

Comment empêcher les messages du noyau d'envahir ma console?

J'utilise Centos 6, la journalisation rsyslog. La console est inondée de messages du noyau.

  • Klogd n'est pas en cours d'exécution (j'utilise rsyslog)
  • La configuration de Rsyslog ne dirige rien vers la console
  • Même essayé d'arrêter complètement rsyslog

Still Quelque chose inonde ma console de messages de journalisation du noyau. Qu'est-ce que c'est et comment puis-je l'arrêter?

Update : Ce sont les messages générés par le noyau (matériel, iptables, etc.), des éléments sortants de /proc/kmsg, comme ceci:

Shorewall: pub2loc: DROP: IN = br0 OUT = MAC = xxx SRC = xxx DST = xxx LEN = 60 TOS = 0x00 PREC = 0x00 TTL = 128 ID = 15731 DF PROTO = TCP SPT = 63767 TDP = 3493 WINDOW = 8192 RES = 0x00 SYN URGP = 0

42
haimg

Je vous suggère de modifier votre /etc/sysctl.conf. Spécifiquement, vous voulez modifier la ligne kernel.printk .

# Uncomment the following to stop low-level messages on console
kernel.printk = 3 4 1 3

Je ne sais pas quels sont les paramètres par défaut du centos, mais il semble probable que les choses soient plus compliquées que nécessaire.

Voir aussi la section shorewall sur la journalisation. Vous n'êtes pas obligé d'utiliser la cible LOG pour la journalisation, vous pouvez utiliser d'autres outils, ajuster la gravité du journal et ajuster les éléments pour contrôler votre destination.

27
Zoredache

Pour définir les valeurs à l'exécution, utilisez sysctl. (Je suppose qu'on peut écrire aussi directement dans /proc/sys/kernel/printk et apparemment, vous pouvez aussi utiliser dmesg -n CUR comme décrit ici )

Afficher:

# sysctl kernel.printk
kernel.printk = 2       4       1       7

Les séparateurs dans la sortie sont des onglets simples, btw.

Ensemble. Ici les séparateurs ne sont que des espaces. Fonctionne aussi bien.

# sysctl -w kernel.printk="2 4 1 7"
kernel.printk = 2 4 1 7
# sysctl kernel.printk
kernel.printk = 2       4       1       7

Voir man sysctl - "configurer les paramètres du noyau au moment de l'exécution" pour plus d'informations.

Rappel des niveaux de sévérité } et des quatre valeurs de kernel.printk données par Brian ci-dessus:

  • CUR = niveau de gravité actuel; seuls les messages plus importants que ce niveau sont imprimés
  • DEF = niveau de gravité par défaut attribué aux messages sans niveau
  • MIN = CUR minimum admissible
  • BTDEF = CUR par défaut au démarrage

Sur mon CentOS: 7 4 1 7

                     CUR  DEF  MIN  BTDEF
0 - emergency        x              x                        
1 - alert            x         x    x
2 - critical         x              x
3 - error            x              x
4 - warning          x    x         x
5 - notice           x              x
6 - informational    V              V
7 - debug            

C'est trop bruyant, je veux juste critique et en place (pas d'erreurs). Les messages sans étiquette doivent être considérés comme des avertissements, donc DEF est bon:

                     CUR  DEF  MIN  BTDEF
0 - emergency        x              x                        
1 - alert            x         x    x
2 - critical         x              x
3 - error            V              V
4 - warning               x         
5 - notice                           
6 - informational                   
7 - debug            

Régler sur: 3 4 1 3

30
David Tonhofer

J'ai trouvé cela utile aussi. Sur les distributions basées sur RHEL, vous pouvez cat /proc/sys/kernel/printk voir quels sont vos paramètres actuels.

Le fichier printk contient quatre valeurs. Chacune de ces valeurs définit une règle différente pour traiter les messages d'erreur. La première valeur, appelée niveau de consignation de la console, définit la priorité la plus basse des messages imprimés sur la console. (Notez que plus la priorité est basse, plus le numéro de niveau de journal est élevé.) La deuxième valeur définit le niveau de journalisation par défaut pour les messages auxquels aucun niveau de journalisation n'est associé. La troisième valeur définit la configuration de niveau de journalisation la plus basse possible pour le niveau de journalisation de la console. La dernière valeur définit la valeur par défaut pour le niveau de log de la console.

L'utilisation du paramètre LOGLEVEL dans/etc/sysconfig/init pour définir le niveau de journalisation de la console n'est plus prise en charge. Pour définir le niveau de journalisation de la console dans Red Hat Enterprise Linux 6, transmettez loglevel = 'en tant que paramètre de temps de démarrage. Par exemple, loglevel = 6 imprimera tous les messages inférieurs à 6 (pas tout à fait inférieurs à).

Crédit à:

11
Brian W

Voici la façon "officielle" de le faire, selon RedHat :

Pour définir le niveau de journalisation de la console dans Red Hat Enterprise Linux 6, transmettez loglevel = <numéro> en tant que paramètre de temps de démarrage.

6
haimg

Vous pouvez également supprimer temporairement toute la journalisation du noyau sur la console en utilisant:

Sudo dmesg -n 1

Voir aussi: https://askubuntu.com/questions/97256/how-do-i-disi-dessable-messages-or-logging-from-printing-on-the-console-virtual-termin

4
Marius

Ce que vous voyez sont des messages de journal du noyau imprimés sur la console. Les messages de journal qui parviennent à la console dépendent du niveau de journal de la console actuellement défini.

Lorsque la cmdline du noyau inclut le paramètre de noyau quiet, le niveau de journal de la console obtenu est 4 (c.-à-d. Erreurs et pire). Sans cela, il est réglé sur 7 (c'est-à-dire info et pire).

Vous pouvez afficher les paramètres de noyau actifs avec cat /proc/cmdline et votre niveau de journal de console actuel avec sysctl kernel.printk. Il peut être modifié dynamiquement avec dmesg -n X (ou même avec sysctl -w).

Pour rendre la modification permanente, vous pouvez ajouter des paramètres de noyau à cmdline (par exemple, quiet et/ou loglevel=X) ou ajouter un fichier sysctl .conf sous /etc/sysctl.d.

Le paramètre du noyau peut être ajouté comme ceci:

# vi /etc/default/grub # edit the GRUB_CMDLINE_LINUX value
# for i in /boot/grub2/grub.cfg /boot/efi/EFI/*/grub.cfg; do
     [ -f "$i" ] && grub2-mkconfig -o "$i" ; done
0
maxschlepzig