我喜欢使用 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/