Shell-Script
如何在啟動期間從 systemd 服務將輸出寫入螢幕?
我有一個在第一次啟動期間執行的自定義 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 上完成的。