GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Messaggi di registro Upstart su Ubuntu 13.x?

Su Ubuntu 12.04, posso trovare i messaggi di registro di Upstart in /var/log/syslog .

Comandi:

# initctl log-priority info
# initctl emit hello

Registro:

Apr  1 01:56:56 precise64 kernel: [ 8365.820425] init: Connection from private client
Apr  1 01:56:56 precise64 kernel: [ 8365.821130] init: Handling hello event

Su Ubuntu 13.10, i messaggi non vengono visualizzati in syslog o in qualsiasi altro punto sotto /var/log directory, sebbene comandi come logger hello lavorare come previsto. Dovrei cercarli da qualche altra parte? C'è un'impostazione di configurazione che devo modificare da qualche parte?

C'è una domanda su Server Fault da qualcuno che sembra avere lo stesso problema su Ubuntu 13.04 e altro qui e qui che potrebbe anche descrivere lo stesso problema. Sfortunatamente, queste domande non offrono indizi per il problema.

Migliore risposta

Modifica 02-06-2016

Se stai cercando di trovare "Messaggi di registro di Upstart" in generale, controlla /var/log/upstart/ . È qui che Upstart salva stdout e stderr dai servizi Upstart. Grazie alla risposta di leopd per averlo sottolineato.

Se stai cercando messaggi di registro da Upstart stesso, che sono configurati da initctl log-priority ed emesso da initctl emit , continua a leggere!

Versione breve

Le voci di registro dovrebbero effettivamente essere visualizzate in dmesg. Nonostante ciò, non viene visualizzato per impostazione predefinita in /var/log .

Se li vuoi in /var/log aggiungi anche $KLogPermitNonKernelFacility on alla configurazione di rsyslogd. Suggerisco di creare un file personalizzato come /etc/rsyslog.d/60-custom.conf per evitare di modificare /etc/rsyslog.conf , poiché è gestito da dpkg. Ora i messaggi di Upstart dovrebbero essere visualizzati in /var/log/syslog , dopo aver impostato la log-priority di Upstart a info o giù di lì.

Versione lunga

Mi ci sono voluti giorni per rintracciarlo, ma a quanto pare Upstart (1.5) non log in syslog, cioè non chiama la funzione glibc syslog() . Invece, Upstart registra nel buffer dell'anello del kernel, che è ciò che legge dmesg. Ora, non pensavo fosse possibile affinché i processi dello spazio utente scrivano su quel buffer, ma a quanto pare possono scrivendo su /dev/kmsg , ed è esattamente ciò che fa Upstart. Quindi questa è la prima parte del puzzle.

La seconda parte è che c'è una convinzione diffusa che i messaggi scritti nel buffer dell'anello del kernel vengano automaticamente copiati in syslog dal kernel (almeno questo è quello che ho sempre pensato). Si scopre che questo è effettivamente fatto da un demone dello spazio utente, tradizionalmente klogd, che opera in tandem con syslogd. Ovviamente rsyslogd sostituisce syslogd ma apparentemente sostituisce anche klogd (più o meno:vedi le note alla fine).

La terza parte è che i messaggi scritti nel buffer circolare del kernel dallo spazio utente in realtà hanno un aspetto diverso dai messaggi scritti dallo spazio del kernel:hanno una struttura diversa. dmesg ha alcune opzioni che interagiscono con questo:-x mostrerà la struttura (e la priorità), mentre -u e -k dite a dmesg di mostrare solo i messaggi delle strutture utente e quelli delle strutture del kernel, rispettivamente.

Correlati:come impedire a Unity di ricordare la cronologia delle ricerche?

Ora ecco il fattore decisivo:per impostazione predefinita, rsyslogd ignora messaggi con una funzione non del kernel quando legge i messaggi dal buffer dell'anello del kernel. L'opzione di configurazione pertinente è $KLogPermitNonKernelFacility , che è disattivato per impostazione predefinita e deve essere attivato se si desidera che rsyslogd elabori questi messaggi. Nota che il resto della configurazione di rsyslogd tratterà tutti i messaggi dal buffer circolare del kernel come se avessero il kern struttura, indipendentemente dalla struttura che avevano nel buffer dell'anello del kernel.

Maggiori informazioni

syslog

Il codice può scrivere su syslog chiamando la funzione glibc syslog() , descritto in man 3 syslog . Apparentemente queste funzioni scrivono in /dev/log . Il codice può essere letto da syslog leggendo /dev/log , e questo è ciò che syslogd e le sue sostituzioni lo fanno. rsyslogd legge /dev/log usando il suo imuxsock modulo di ingresso.

Buffer dell'anello del kernel

Lo spazio del kernel scrive in questo buffer chiamando la funzione del kernel printk() , quindi a volte viene chiamato printk buffer. Lo spazio utente può scrivervi scrivendo su /dev/kmsg . Lo spazio utente può leggere da questo buffer in diversi metodi:può leggere da /proc/kmsg (cosa fa dmesg per impostazione predefinita), oppure può leggere da /dev/kmsg oppure può chiamare la chiamata di sistema syslog() , che è descritto in man 2 syslog ed è completamente diverso dalla funzione glibc syslog() descritto in man 3 syslog . glibc fornisce effettivamente un wrapper alla chiamata di sistema syslog() , chiamato klogctl() , per alleviare questa confusione.

Tradizionalmente, klogd legge da una di queste interfacce, quindi chiama la funzione glibc syslog() per copiarli nel syslog. rsyslogd legge una di queste interfacce attraverso il suo imklog modulo di input ma AFAIK non si preoccupa di chiamare glibc syslog() , ecco perché non è esattamente come klogd; elabora semplicemente l'output di imklog proprio come elabora l'output da qualsiasi altro modulo di input. C'è l'avvertenza aggiunta che tutti imklog l'output ha il kern struttura indipendentemente dai messaggi di struttura presenti nel buffer dell'anello del kernel.

Riferimenti

  • http://upstart.ubuntu.com/cookbook/#initctl-log-priority (indica erroneamente che Upstart si collega a syslog)
  • https://www.kernel.org/doc/Documentation/ABI/testing/dev-kmsg
  • http://www.gnu.org/software/libc/manual/html_node/Overview-of-Syslog.html
  • http://www.rsyslog.com/doc/v5-stable/configuration/modules/imklog.html (Si noti che questo è per v5, utilizzato in Ubuntu 12.04. Queste opzioni sono considerate legacy nelle recenti versioni di rsyslog)

Ubuntu
  1. Rilasciato il kernel Linux 5.13! Come installare in Ubuntu 21.04

  2. Differenza tra /var/log/messages, /var/log/syslog e /var/log/kern.log?

  3. Come impostare un servizio?

  4. Installazione non riuscita di Virtualbox 5.1 su Ubuntu 16.04?

  5. I messaggi Auditd si stanno riempiendo /var/log/messages

Come installare il kernel Linux 5.15 su Ubuntu 20.04

Come controllare la versione del kernel in Ubuntu 20.04

4 modi per disconnettersi da una sessione desktop di Ubuntu

Come installare l'ultimo kernel Linux 5.15 su Ubuntu 20.04

Come installare l'ultimo kernel Linux 4.8 su Ubuntu 16.04

Come installare il kernel Linux 4.7.2 su Ubuntu 16.04 LTS