【问题标题】:send stdout/stderr to console for a systemd service将 stdout/stderr 发送到控制台以获取 systemd 服务
【发布时间】:2016-11-25 21:49:30
【问题描述】:

我有一个应用程序,我们正在从使用 initd 转换为 systemd。 initd 脚本用于运行“myscript.bash start”,但用户也可以运行“myscript.bash start”。现在,当用户运行“myscript.bash start”时,它会运行 systemctl(它本身会启动“myscript.bash startup”)来启动服务。 (我知道这是迟钝的 - 想法是保留 myscript.bash 内容的版本历史记录,而且还允许用户以他们习惯的方式启动系统,切换到 systemctl 应该是不可见的)。

以前,如果用户运行 myscript.bash,他们会在控制台上收到一堆关于启动情况的更新。现在该信息不会发送到控制台。我已经尝试了几件事,最有希望的似乎是将 StandardOutput 和 StandardError 设置为 tty:

StandardOutput=tty
StandardError=tty
ExecStart=/bin/bash -c './myscript.bash startup &'
ExecStop=/bin/bash -c './myscript.bash shutdown'

但我收到此错误:

systemd[20694]: Failed at step STDOUT spawning /bin/bash: Inappropriate ioctl for device

我看过这个:How to Pipe Output to a File When Running as a Systemd Service?(这给了我尝试 StandardOutput= 的想法),但目标是写入文件,我正在尝试将输出输出到用户的控制台。

这是因为我们有一个运行 systemctl 的脚本,而不是由用户直接启动它吗?有没有办法做到这一点?

【问题讨论】:

    标签: linux systemd


    【解决方案1】:

    我想做类似的事情,设置StandardOutput=journal+console 对我有用。 FWIW 这是相关的 systemd 文档https://www.freedesktop.org/software/systemd/man/systemd.exec.html

    在您的情况下,您想查看TTYPath 选项,特别是 systemd 的默认值与系统上的默认值。 HTH。

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • 我没有通过日志+控制台获得想要的结果。 “控制台”是指系统控制台,即连接到机器的监视器,还是表示运行 systemd 的用户会话?在我的情况下,我被 sshed 到一台机器上并在一个分叉的单元上运行 systemd --user start。我想在我的 ssh 会话中实时查看 ExecStart 输出。
    • 来自答案中的链接:“Journal+console、syslog+console 和 kmsg+console 的工作方式与上述三个选项类似,但也将输出复制到系统控制台。”有关系统控制台的更多信息,请参阅此答案:unix.stackexchange.com/questions/60641/…
    猜你喜欢
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2011-12-22
    • 1970-01-01
    • 2011-04-22
    • 2011-04-25
    相关资源
    最近更新 更多