我无法弄清楚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 信息。