Logs

控制台和虛擬終端中的程序輸出不同

  • September 6, 2020

foo當我在控制台(即)中執行命令時tty1,輸出被發送到控制台。

daemon foo started successfully

當我在虛擬終端 ( ) 中執行相同的命令時terminator,我在終端中看不到任何輸出,但輸出被發送到syslog.

為什麼會這樣,我如何控制輸出的發送位置?

我有一個執行命令的 init 啟動腳本,foo輸出被發送到tty1. 我想將輸出發送到 syslog(就好像我已經在虛擬終端中啟動了 init 腳本,而不是在控制台中)

正如您可以在daemon 的 Debian 手冊頁中閱讀的那樣,這在很大程度上取決於您如何在哪個 init 系統下實現您的守護程序。

  • SysV方式(stdin/out/err連接到/dev/null)
  • 新式”方式:(stdout/stderr 指向 systemd-journald.service)

… 10.不是使用 syslog() 呼叫直接記錄到系統 syslog 服務,新式守護程序可以選擇簡單地通過 fprintf() 記錄到標準錯誤,然後由 init 系統轉發到 syslog

在後一種情況下,您在 xterm 下注意到的行為是正常的方式。

守護程序通過 fprintf (stdout / stderr) 輸出的內容然後在 syslog 的控制之下。

因此,根據您的系統日誌配置(如您在 syslog.conf 文件中找到的那樣)和日誌級別,您的守護程序輸出將被忽略/附加到某些特定文件/在系統控制台(您的 tty1)上回顯,永遠不要xterm。

引用自:https://unix.stackexchange.com/questions/606402