l'output del programma è diverso nella console e nel terminale virtuale

Aug 26 2020

quando eseguo il comando fooin console (cioè tty1), l'output viene inviato alla console.

daemon foo started successfully

Quando eseguo lo stesso comando in virtual terminal ( terminator), non vedo alcun output nel terminale, ma l'output viene inviato a syslog.

Perché è questo e come posso controllare dove viene inviato l'output?

Ho uno script di avvio di init che esegue il comando fooe l'output viene inviato a tty1. Vorrei invece inviare l'output a syslog (come se avessi avviato lo script di inizializzazione nel terminale virtuale, invece che in console)

Risposte

3 MC68020 Aug 31 2020 at 11:05

Come puoi leggere nella pagina man di Debian per daemon , dipende molto da come hai implementato il tuo demone sotto quale sistema di inizializzazione.

  • Il modo SysV (stdin / out / err connesso a / dev / null)
  • Il modo " Nuovo stile ": (stdout / stderr diretto a systemd-journald.service)

... 10.Invece di usare la chiamata syslog () per accedere direttamente al servizio syslog di sistema, un demone di nuovo stile può scegliere di accedere semplicemente allo standard error tramite fprintf (), che viene poi inoltrato a syslog dal sistema init ...

In quest'ultimo caso, il comportamento che noti sotto xterm è il modo normale.

Ciò che il demone emette tramite fprintf (stdout / stderr) è quindi sotto il controllo di syslog.

Pertanto, a seconda della configurazione del tuo syslog (come lo trovi nel tuo file syslog.conf) e del livello di log, ciò che il tuo demone verrà ignorato / aggiunto a qualche file particolare / echeggiato sulla console di sistema (il tuo tty1) e mai xterm.

AndrewYu Aug 29 2020 at 06:54

Questo è un comportamento dell'applicazione, non a livello di sistema. rsyslog verrà chiamato solo quando un'applicazione lo fa, tramite un servizio di registrazione o simili. Sullo schermo vengono visualizzati output standard e flusso di errori, a meno che non venga reindirizzato.