如何从终端执行程序,将 stdout 和 stderr 重定向到 systemd 的日志?

如何从终端执行程序,将 stdout 和 stderr 重定向到 systemd 的日志?

有没有一种简单的方法可以从终端运行命令,就像从 GNOME 的 Alt + F2 运行命令一样,将 stdout 和 stderr 重定向到 systemd 的日志?

我尝试过 gmrun (不重定向输出)、gtk-launch (仅适用于 /usr/share/applications 中的 .desktop 文件)。

是否有 GNOME 或 systemd 命令可以执行此操作?

答案1

我认为您应该使用该logger(1)实用程序,无论您的系统是否使用systemd或,它都可以工作rsyslogd

your_prog 2>&1 | logger -t your_prog

在带有 systemd 的系统上,还有systemd-cat专门使用 systemd 的“流式”日志记录 api ( sd_journal_stream_fd(3), /run/systemd/journal/stdout) 而不是标准的syslog(3)

your_prog 2>&1 | systemd-cat -t your_prog

systemd-cat -t your_prog your_prog

要保存另一个搜索:如果您只想通过管道传输 stderr 而不是 stdout,则可以使用

log_stderr(){ { "$@" 2>&1 >&3 3>&- | logger -t "$1"; } 3>&1; }
log_stderr your_prog

答案2

systemd-run --user ...

不幸的是,默认情况下并未使用最用户友好的模式。

默认情况下,创建的服务systemd-run默认类型为simple[...] 考虑使用exec服务类型(即--property=Type=exec)以确保systemd-run仅当指定的命令行已成功启动时才成功返回。

这个更有用的设置是后来添加的。就我个人而言,我认为我不会记住这个细节。所以我更喜欢使用简短的包装脚本。

相关内容