bash - 有没有办法从脚本中将所有 stdout 和 stderr 重定向到 systemd 日志?

标签 bash logging stdout stderr systemd-journald

我喜欢使用 systemd 的日志来查看和管理我自己的脚本日志的想法。我已经意识到您可以在每条消息的基础上从我的用户脚本登录到日志。

echo 'hello' | systemd-cat -t myscript -p emerg

有没有办法将所有消息重定向到日志,即使是由其他命令生成的消息?喜欢..
exec &> systemd-cat

更新:

部分成功。
试过 Inian来自终端的建议。
~/scripts/myscript.sh 2>&1 | systemd-cat -t myscript.sh

它起作用了,stdout 和 stderr 被定向到 systemd 的日志。
奇怪的是,
~/scripts/myscript.sh &> | systemd-cat -t myscript.sh

在我的 Bash 终端中不起作用。

当其他程序调用我的脚本时,我仍然需要在我的脚本中找到一种方法来执行此操作。

我试过..
exec 2>&1 | systemd-cat -t myscript.sh

但它不起作用。

更新 2 :

从终端
systemd-cat ~/scripts/myscript.sh

作品。但我仍在寻找一种从脚本中执行此操作的方法。

最佳答案

一个管道到 systemd-cat是一个需要与您的脚本同时运行的进程。 Bash 提供了一个工具,尽管它不能移植到 POSIX sh .

exec > >(systemd-cat -t myscript -p emerg) 2>&1
>(command)进程替换启动另一个进程并返回一个伪文件名(类似于 /dev/fd/63 ),您可以重定向到该文件名。这基本上是 mkfifo 的包装器如果你想把它移植到 POSIX,你可以做的 hack sh .

关于bash - 有没有办法从脚本中将所有 stdout 和 stderr 重定向到 systemd 日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54394574/

相关文章:

rawvideo 的 FFmpeg 标准输出数据包大小

python - 我如何使用 Mechanize 接受和发送 cookie?

bash - 在 bash 中将一行拆分为单词

javascript - Javascript 提供了哪些调试日志记录工具?

ruby-on-rails - Rails 开发日志文件 - 撰写时

android - 如何在 Flutter 中禁用发布版本中的所有日志 [debugPrint()]?

c++ - 监视标准输出缓冲区并重定向到字符串 C++

logging - os.Pipe 无法按预期使用日志包

bash - 如何在 bash 中比较两个 tar 文件而不使用临时文件?

bash - docker中的chain sleep命令是如何组成的?