起動中にシステムサービスの出力を画面に書き込むにはどうすればよいですか?

起動中にシステムサービスの出力を画面に書き込むにはどうすればよいですか?

最初の起動中に実行されるカスタム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「output」を検索し、 で文書化されStandardOutput=た内容を見つけることができますman systemd.exec。ここでは、journal+consolesystemdログとシステムコンソールに出力を送信することを含むオプションを見つけることができます。また、それを試すことができますkmsg+consolekmsg「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。なぜ2つがあるのかExecStart​​、なぜ「-」がコピーされて貼り付けられたのかわかりません。追加しましたAfter=/ExecStartPre=メッセージが表示されないため、他のユーザーが画面を消去している可能性があります。したがって、ターゲットの「ログインプロンプト」の後にある必要があります。

免責事項:この回答はアイデアのコレクションで書かれています。私は彼らが迷子にしたくありません。ご質問がございましたら、直接調べてみて、結果を自由に貢献してください。

これはXなしでDebian Stretchで行われました。

関連情報