关于bash:是否可以将所有stdout和stderr从脚本内重定向到systemd日志?

Is there a way to redirect all stdout and stderr to systemd journal from within script?

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

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

是否有一种方法可以将所有消息重定向到日志,甚至包括其他命令生成的消息?

1
exec &> systemd-cat

更新:

部分成功。尝试了终端机Inian的建议。

1
~/scripts/myscript.sh 2>&1 | systemd-cat -t myscript.sh

起作用了,stdout和stderr定向到systemd的日记。奇怪的是,

1
~/scripts/myscript.sh &> | systemd-cat -t myscript.sh

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

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

我尝试过。.

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

,但是它不起作用。

更新2:

从终端

1
systemd-cat ~/scripts/myscript.sh

运行。但是我仍在寻找在脚本中执行此操作的方法。


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

1
exec > >(systemd-cat -t myscript -p emerg) 2>&1

>(command)进程替换启动另一个进程并返回一个伪文件名(类似于/dev/fd/63)可以重定向到。这基本上是mkfifo hack的包装,如果您想将其移植到POSIX sh


显然,由于超出我的原因,您不能真正将所有stdout和stderr从脚本内重定向到日志,因为必须将其输入。要解决此问题,我发现了人们正在使用的一个技巧syslog的记录器的工作原理类似。

您可以将所有代码包装到一个函数中,然后将该函数通过管道传递到systemd-cat。 。

1
journalctl -t myscript.sh --since yesterday

我很失望,这里没有更直接的方法。