web-dev-qa-db-ja.com

起動中に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
4

man systemd.directivesで「出力」を検索すると、StandardOutput=man systemd.execに記載されていることがわかります。そこには、systemd Journalとシステムコンソールに出力を送信するためのjournal+consoleなどのオプションがあります。 kmsg+consoleもお試しください。ドキュメントkmsgによると、「標準出力を、dmesg(1)を介してアクセス可能なカーネルログバッファーに接続します」

4
Mark Stosberg

こうやってやった。 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の説明:execは1回だけです。 Restart=nooneshotの要件。なぜ2つのExecStartがあり、なぜ「-」なのかわからない、これはコピーアンドペーストでした。追加した After=/ExecStartPre=メッセージが表示されなかったため、おそらく誰かが画面をクリアしました。したがって、ターゲット「ログインプロンプト」の後にある必要があります。

免責事項:この回答をアイデアのコレクションとして使用してください。迷子になってほしくなかった。ご不明な点がございましたら、ご自身で調査を行い、結果をご提供ください。

これは、XなしのDebianストレッチで行われました。

0
JPT