Shell-Script

如何在啟動期間從 systemd 服務將輸出寫入螢幕?

  • August 16, 2018

我有一個在第一次啟動期間執行的自定義 systemd 服務。

如果使用者沒有 bootsplash,我想寫信給控制台並提供一些關於正在發生的事情的資訊。有沒有辦法從我的服務中做到這一點?

這是我的系統服務:

[Unit]
Description=Prepare operator after installation
Before=getty@tty1.service getty@tty2.service getty@rrt3.service getty@tty4.service getty@tty5.service getty@tty6.service
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

man systemd.directives中,您可以搜尋“輸出”並找到StandardOutput=在 中記錄的內容man systemd.exec。在那裡您可以找到選項,包括journal+console將輸出發送到 systemd Journal 和系統控制台。你也可以試試kmsg+console。根據文件kmsg“將標準輸出與可通過 dmesg(1) 訪問的核心日誌緩衝區連接起來”

我是這樣做的。我在 tty1 中沒有登錄提示。所以它沒有開箱即用地顯示 MOTD。

[Service]
Type=oneshot
Restart=no
ExecStartPre=/bin/sleep 10
After=getty@tty2.service 
ExecStart=
ExecStart=-/bin/cat /etc/motd
StandardOutput=tty
TTYPath=/dev/tty1

哪裡oneshot說:只執行一次。Restart=no的要求oneshot。不知道為什麼有兩個ExecStart,為什麼是“-”,這是複制和粘貼。我添加了After=/ExecStartPre=因為消息沒有出現,可能螢幕被其他人清除了。所以它應該在目標“登錄提示”之後。

免責聲明:將此答案用作想法的集合。我不想讓他們迷路。如果您有任何問題,請自行進行研究,並隨時貢獻您的發現。

這是在 Debian stretch w/o X 上完成的。

引用自:https://unix.stackexchange.com/questions/352122