我有一个在首次启动期间运行的自定义 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。