Linux:如何将标准输出和标准错误重定向到记录器?

Linux:如何将标准输出和标准错误重定向到记录器?

我有一个需要在启动时运行的程序,它在 stdout 和 stderr 上有输出,我想使用 logger 命令重定向到系统日志。我的启动脚本中的内容是:

/home/dirname/application_name -v|记录器 2>&1 &

这将 stdout 重定向到 syslog 很好,但是 stderr 来到控制台,所以我需要改进命令。

答案1

您需要在将 STDERR 和 STDOUT 的输出通过管道传输到 之前将其组合起来logger。试试这个:

/home/dirname/application_name -v 2>&1 | logger &

例子

$ echo "hi" 2>&1 | logger &
[1] 26818
[1]+  Done                    echo "hi" 2>&1 | logger

$ sudo tail /var/log/messages
Apr 12 17:53:57 greeneggs saml: hi

如果在实际的 Bash shell 中谨慎使用的话,您也可以在此处使用缩写符号(不要与 Dash 混淆):

$ echo "hi" |& logger &

笔记:这相当于<cmd1> 2>&1 | <cmd2>.同样,只有在交互地使用实际的 Bash shell 时才使用上面的内容,这将是一个很好的方法。

摘自ABSG

# |& 被添加到 Bash 4 作为 2>&1 | 的缩写。

参考

答案2

您还可以将 stdout 和 stderr 记录到 syslog 中的不同级别。

{ ( echo info; >&2 echo critical ) 2>&3 | logger -t mycoolscript; } 3>&1 1>&2 | logger -t mycoolscript -p 2

第一部分( echo info; >&2 echo critical )模拟一个在 stdout 和 stderr 上输出的程序。

诀窍就2>&3来自于此回答,能够将 stdout 和 stderr 输出到不同的进程。

journalctl -f您可以使用带有 systemd 的 Linux 来观察结果。

相关内容