如何将脚本输出发送到 syslog

Posted

技术标签:

【中文标题】如何将脚本输出发送到 syslog【英文标题】:How to send script output to syslog 【发布时间】:2017-09-03 22:06:02 【问题描述】:

我想更改当前将其输出写入日志文件的脚本。

 ~/bin/setBatteryProtect.sh >> /tmp/battery.log

我想让输出发送到系统日志。这样做的最佳选择是什么。最可靠的版本似乎是使用logger。我实际上想避免更改脚本 - 所以我正在寻找一个将完整输出发送到 syslog 的选项。这可能吗?

【问题讨论】:

【参考方案1】:

logger 如果没有在命令行上指定消息并且没有使用-f(从文件读取),则从标准输入读取。

utility | logger

将使用 logger 记录到 syslog,utility 的每行输出有一个日志条目。

添加-t tag 为日志添加标签。没有它,执行logger的用户的用户名将被用作标签。

【讨论】:

感谢这在命令行上运行良好,但从 cron 开始,我在 syslog 中没有任何条目,也没有任何其他(可见的)错误。使用 cron 时是否需要考虑其他选项? @MBushveld 嗯..这很奇怪。我不明白为什么那行不通。 当我将这个“/home/mi01/bin/setBatteryProtect.sh 2>&1 | logger -t setBattery”直接放在 crontab 中时,它会按预期工作。但是当我把它放在一个文件中并将它放在 /etc/cron.daily/ 中时,不会写入任何 autput。由于 crontab 启动了 anacron,它遍历文件并运行它们,我认为问题存在于某处。任何提示如何获得更好的信息甚至解决方案?【参考方案2】:

把它放在脚本的顶部?我在另一个网站上找到了它

exec 1> >(logger -s -t $(basename $0)) 2>&1

来源:“https://www.urbanautomaton.com/blog/2014/09/09/redirecting-bash-script-output-to-syslog/”

【讨论】:

欢迎来到 Stack Overflow!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。

以上是关于如何将脚本输出发送到 syslog的主要内容,如果未能解决你的问题,请参考以下文章

如何将结构化数据从 Twisted 发送到 syslog?

如何在 python 中将日志发送到 syslog?

如何让 cout 同时发送到控制台和系统日志

使用 Groovy 或 Java 将日志发送到 Syslog 服务器

如何从发送到 Logstash 的 syslog 日志中检索标签?

如何将 Python 脚本的部分输出发送到文本文件?