systemd 服务输出到终端/pty

systemd 服务输出到终端/pty

我无法弄清楚StandardOutput=要为单元文件(.service)传递什么选项,我想在启动服务的连接终端上显示一些消息!(console/tty似乎不是我想要的)

也许可以更改/etc/systemd/system.conf全局默认值DefaultStandardOutput=journal,但我不想这样做!我只想显示来自我的单元文件的一些进度/启动消息(例如systemd-run -P

我在 Ubuntu 18.04.2 上

# systemd --version
systemd 237

答案1

你可以看看https://www.freedesktop.org/software/systemd/man/systemd.exec.html#StandardOutput=

如果我理解正确的话,您希望服务将状态输出到 tty / 控制台吗?请记住,当服务启动时,systemd 会处理默认文件描述符。

您可以使用文件来存储状态并在其中进行查询。

答案2

编辑您想要使用 systemd 运行的脚本并添加| logger您想要输出到 syslog 的命令:

#!/bin/bash
/usr/bin/ps aux | /usr/bin/grep gnome > /home/user/test/psoutput.txt
/usr/bin/date | logger
echo "This is terminal output" | logger
/usr/bin/date >> /home/user/test/psoutput.txt

的输出$ sudo journalctl -u pstofile -f为:

бер 09 13:33:42 lenovo systemd[1]: Started ps aux to file.
бер 09 13:33:42 lenovo root[8491]: понеділок, 9 березня 2020 13:33:42 +0200
бер 09 13:33:42 lenovo root[8493]: This is terminal output
бер 09 13:33:42 lenovo systemd[1]: pstofile.service: Succeeded.

我的 systemd 服务文件包含以下内容:

[Unit]
Description=ps aux to file
After=systemd-user-sessions.service

[Service]
Type=simple
Restart=always
RestartSec=5
ExecStart=/home/user/test/pstofile.sh
StandardInput=journal+console
StandardOutput=journal+console

[Install]
WantedBy=multi-user.target

答案3

时间已经过去很久了,我只想更新一下我是如何解决这个问题的。我创建了一个 POSIX MQ,守护进程监听它。这个守护进程负责向当前 pty ( mq_receive()+ write()) 显示。所有守护进程在启动时和停止时都会在队列上发送一条消息(使用mq_send()

当我启动主服务时,我也将启动这个展示提供该服务的是 pty 信息。

相关内容