Output program berbeda di konsol dan terminal virtual
ketika saya menjalankan perintah foodi konsol (yaitu tty1), output dikirim ke konsol.
daemon foo started successfully
Ketika saya menjalankan perintah yang sama di terminal virtual ( terminator), saya tidak melihat output di terminal, tetapi output dikirim ke syslog.
Mengapa demikian, dan bagaimana cara mengontrol ke mana output dikirim?
Saya memiliki skrip startup init yang menjalankan perintah foo, dan output dikirim ke tty1. Saya ingin mengirim output ke syslog sebagai gantinya (seolah-olah saya telah memulai skrip init di terminal virtual, bukan di konsol)
Jawaban
Seperti yang dapat Anda baca di halaman manual Debian untuk daemon , ini sangat tergantung pada bagaimana Anda mengimplementasikan daemon Anda di bawah sistem init.
- Cara SysV (stdin / out / err terhubung ke / dev / null)
- Cara " Gaya baru ": (stdout / stderr diarahkan ke systemd-journald.service)
... 10. Alih-alih menggunakan panggilan syslog () untuk masuk langsung ke layanan syslog sistem, daemon gaya baru dapat memilih untuk masuk ke kesalahan standar melalui fprintf (), yang kemudian diteruskan ke syslog oleh sistem init ...
Dalam kasus terakhir ini, perilaku yang Anda lihat di bawah xterm Anda adalah cara yang normal.
Apa keluaran daemon melalui fprintf (stdout / stderr) kemudian di bawah kendali syslog.
Oleh karena itu, tergantung pada konfigurasi syslog Anda (seperti yang Anda temukan di file syslog.conf Anda) dan tergantung pada level log, keluaran daemon Anda akan diabaikan / ditambahkan ke beberapa file tertentu / di-echo di konsol sistem (tty1 Anda), dan tidak pernah xterm.
Ini adalah perilaku aplikasi, bukan seluruh sistem. rsyslog hanya akan dipanggil ketika aplikasi melakukannya, melalui layanan logging atau semacamnya. Output standar dan aliran kesalahan kecuali dialihkan muncul di layar Anda.