如何在启动期间将 systemd 服务的输出写入屏幕?

如何在启动期间将 systemd 服务的输出写入屏幕?

我有一个在首次启动期间运行的自定义 systemd 服务。

如果用户没有引导启动,我想写入控制台并提供一些有关正在发生的情况的信息。有没有办法从我的服务中做到这一点?

这是我的系统服务:

[Unit]
Description=Prepare operator after installation
[email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
Wants=network-online.target
After=network.target network-online.target
OnFailure=emergency.target
OnFailureJobMode=replace-irreversibly

[Service]
Type=oneshot
ExecStart=/usr/bin/provision-operator

[Install]
WantedBy=multi-user.target

答案1

在 中man systemd.directives,您可以搜索“输出”并找到StandardOutput=在 中记录的内容man systemd.exec。在那里您可以找到选项,包括journal+console将输出发送到 systemd 日志和系统控制台。你也可以尝试一下kmsg+console。根据文档kmsg“将标准输出与可通过 dmesg(1) 访问的内核日志缓冲区连接”

答案2

我就是这样做的。我在 tty1 中没有登录提示。所以它不显示开箱即用的 MOTD。

[Service]
Type=oneshot
Restart=no
ExecStartPre=/bin/sleep 10
[email protected] 
ExecStart=
ExecStart=-/bin/cat /etc/motd
StandardOutput=tty
TTYPath=/dev/tty1

其中oneshot说:仅执行一次。Restart=no的要求oneshot.不知道为什么有两个ExecStart,为什么是“-”,这是复制和粘贴的。我添加了After=/ExecStartPre=因为该消息没有显示,可能屏幕已被其他人清除。所以它应该在目标“登录提示”之后。

免责声明:将此答案用作想法的集合。我不想让他们迷路。如果您有任何问题,请自行研究,并随时贡献您的发现。

这是在 Debian Stretch 上完成的,没有 X。

相关内容