控制台和虚拟终端中的程序输出不同

控制台和虚拟终端中的程序输出不同

foo当我在控制台中执行命令(即tty1)时,输出将发送到控制台。

daemon foo started successfully

当我在虚拟终端 ( ) 中执行相同的命令时terminator,我在终端中看不到任何输出,但输出被发送到syslog.

为什么会这样?我如何控制输出的发送位置?

我有一个执行 command 的 init 启动脚本foo,并将输出发送到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。

相关内容