コンソールと仮想端末のプログラム出力が異なります。

コンソールと仮想端末のプログラム出力が異なります。

fooコンソール(たとえばtty1)でコマンドを実行すると、出力はコンソールに送信されます。

daemon foo started successfully

仮想端末()で同じコマンドを実行すると、terminator端末に出力は表示されませんが、出力はに送信されますsyslog

なぜこれが起こるのですか?出力が送信される場所をどのように制御しますか?

fooコマンドを実行して出力を送信するinit起動スクリプトがありますtty1。出力をsyslogに送信したいと思います(コンソールではなく仮想端末でinitスクリプトを起動したかのように)。

答え1

あなたができるようにデーモンの 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設定(syslog.confファイルにあります)とログレベルによっては、デーモン出力が無視されたり、特定のファイルに追加されたり、システムコンソール(tty1)エコーでxtermが発生したりしません。

関連情報