DebianをはじめとするLinuxのディストリビューションでは重大なエラーがsyslogに記録された際にSSH等を含めその時ログインしている全員にその内容を通知するという設定がデフォルトになっています。しかしその通知を望ましくないと思っている管理者もいるのではないかと思います。今回はそのメッセージを抑止する方法をご紹介します。
手っ取り早く設定方法だけ知りたいという方はここから読み進めてください。
syslogのメッセージには1つ1つにレベルというものが設定されています。ほとんど気にしなくて良いinfoだとか、errorのように。 そのレベルのうち最上位、システムが停止する可能性がある重大なエラーをemergと分類しています。多くのディスとリビュージョンではこのメッセージが出力た際にログイン中の全ユーザのターミナルに通知されるという設定になっています。
話を始める前にいくつかの機能を確認です。wallという機能をご存知でしょうか。この機能は現在ログインしているユーザ全員に通知をする機能です。SSHなどで2窓した状態で片方の窓から下記のコマンドを実行してみましょう。
# wall test
するともう片方の窓にはその内容が表示されているはずです。
Broadcast message from root@localhost.localdomain (pts/1) (Thu Jan 20 01:12:38 test [nogisawa@localhost ~]$
これがwallです。特にシャットダウンを実行した際に目にすると思います。ここではユーザ全員に通知する機能程度に思っておいてください。(実際それ以外の機能もないんですけど…)
Linuxにはloggerというコマンドがいます。このコマンドは意図的にsyslogの出力を生成する為のコマンドです。試しに下記のコマンドを実行してみましょう。
# logger test
その後にsyslogを確認してみてください。
# tail -n 1 /var/log/syslog Jan 21 15:32:55 localhost XXXX: test
syslogにtestというメッセージが記録されました。
先程メッセージにはレベルがあると言いましたが、-pオプションでその指定が可能です。例えばerrorとしたい場合下記のようにします。
# logger -p error test
loggerコマンドの使い方を知った所で実際にloggerコマンドを使って再現してみましょう。
SSHなどを複数接続して2窓した状態で下記のコマンドを実行してみましょう。
root@localhost:~ # logger -p emerg EMERGE TEST
すると別の端末では下記のように表示されているはずです。
Message from syslogd@localhost.localdomain at Jan 21 20:56:40 ... nogisawa: EMERGE TEST Broadcast message from systemd-journald@localhost.localdomain (Fri 2022-01-21 20:56:40 JST): nogisawa[18657]: EMERGE TEST
この際にメッセージが2つある事に注目してください。
syslogとsystemd-journaldの2つがメッセージをwallに投げているという事です。
その為このメッセージを抑止するにはsyslogとsystemd-journaldの2箇所で設定を行う必要があります。
rsyslog.conに全体へ配信するための設定があります。そこをコメントアウトします。
root@localhost:~# vi /etc/rsyslog.conf 〜〜(略)〜〜 # # Emergencies are sent to everybody logged in. # *.emerg :omusrmsg:* <--★ここをコメントアウト 〜〜(略)〜〜
rsyslogを再起動します。
root@localhost:~# systemctl restart rsyslog
jounald.confの[Jounal]セクション内に「ForwardToWall=no」という設定を追加します。
root@localhost:~# vi /etc/systemd/journald.conf [Journal] 〜〜(略)〜〜 ForwardToWall=no <--★追加
systemd-jounaldを再起動します。
root@localhost:~# systemctl restart systemd-jounald
設定が完了すると下記コマンドを実行しても他の窓には何も表示されなくなったはずです。
root@localhost:~ # logger -p emerg EMERGE TEST