将Shell脚本stderr重定向到syslog

问题描述

我经常看到stdout和stderr都通过管道传输到syslog。但是,将无法再在syslog中区分是否为错误。消息严重性始终是信息(或者是我使用一个记录器命令的-p选项设置的信息)。如何解决这个问题呢?具体来说,这与我的备份脚本发送echo "Error occurred...!" >&2

错误有关

该脚本通过以下语句作为cron作业运行:

/root/bin/backup 2>&1 | /usr/bin/logger -t backup -i

解决方法

您可以轻松地将stdout和stderr分别传递给不同的命令:

{ some_command 2>&3 | logger -t OUTPUT -i; } 3>&1 | logger -t ERROR -i

示例:

# { ls -d /etc /etx 2>&3 | logger -t OUTPUT -i; } 3>&1 | logger -t ERROR -i
# tail -n2 /var/log/messages
Sep 27 16:30:12 xxxx ERROR[4138]: ls: cannot access '/etx': No such file or directory
Sep 27 16:30:12 xxxx OUTPUT[4140]: /etc