相关疑难解决方法(0)

将 stderr 和 stdout 分别重定向到 bash 脚本中的函数

我正在编写一个包装脚本来将 cronjob 输出记录到 journald。

我有几个目标:

  • 必须将 stderr 和 stdout 以不同的优先级和前缀标签记录到日志中
  • 还必须将包装命令的 stderr 输出到包装脚本的 stderr(由 cron 捕获并通过电子邮件发送警报)
  • 必须始终保持行序

到目前为止,我似乎有两个问题:

  1. 我不确定如何将 stderr 和 stdout 分别重定向到我的日志记录功能。到目前为止,我尝试过的所有内容都无法重定向除 NULL 以外的任何内容。在我看来,重定向不是我的强项之一。(已解决,见评论)
  2. 我目前的方法{ $_EXEC $_ARGS 2>&1 1>&7 7>&- | journaldlog error; } 7>&1 1>&2 | journaldlog info似乎正好运行两次日志记录功能,一次用于 stderr,一次用于 stdout。这不会保留行顺序。我宁愿它在每个输出行运行一次该函数。

我应该放弃在 bash 中执行此操作并尝试使用 Perl 吗?我确信我的 Perl 经验会回到我身上......最终。

我尝试了很多不同的方法。其中大部分是在网上找到的,尤其是在堆栈交换上。老实说,我不记得我还尝试过什么……此时只是模糊。bash 文档也没有太大帮助。

bash logs io-redirection shell-script systemd-journald

6
推荐指数
2
解决办法
6323
查看次数