サーバが不定期に再起動するという問題に遭遇したのですが、どういったところを調査したか書きます。ちなみに、Ubuntu前提で書いてますが、他のディストリビューションでも基本は一緒だと思います。

調査


再起動した時刻を調べる

1
last reboot

まず、コレ。これでいつ再起動したのか確認します。

各種ログの確認

/var/log配下の下記のログを調べます。

  • auth.log
  • syslog
  • kern.log

auth.logで侵入されていないかsyslogkern.logではシャットダウンの原因が残っていないか確認します。なお、カーネルパニック時はkern.logに書き込まれる前にシャットダウンしてしまうとkern.logにも残りません。また、ハードウェア原因でシャットダウンした場合もこちらには何も残らないです。(たぶん)

cronの確認

再起動させているcronが無いか確認します。なお、再起動後にログにCRON @rebootjobsが出ていると思いますが、これはcronのデーモン初回起動時に実行されるものなので問題ないです。

Cron Running @reboot jobs

上記の私の翻訳が間違っていなければ…

カーネルパニック時の再起動を疑う

カーネルパニック時に自動で再起動する設定になっているかどうか確認します。/etc/sysctl.confkernel.panic0であればカーネルパニック時に再起動されません。今回はこれが0だったのでこの線もはずれました。

カーネルパニック時に自動で再起動させる - Qiita

追加の調査設定を行う


で、ここまででダメだったので追加で以下の調査用設定を行いました。

var log messageを出力する

ようにします。/etc/rsyslog.d/50-default.confの下記のコメントアウトを外します。

1
2
3
4
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages

この後service rsyslog restartでサービス再起動します。

sar(sysstat)でリソースの使用状況をログに残す

/etc/default/sysstatENABLEtrueにしてservice sysstat restartでサービスを起動します。
cronは/etc/cron.d/sysstatに書いてあります。デフォルトは10分おきになっています。

これで再起動前にどれくらいリソースを使用しているか確認します。ちなみにLinuxはメモリがあいている限りページキャッシュで使うはずなのでmemusedの値は高くても問題ないです。

自動セキュリティアップデートを疑う

unattended-upgradesを有効にしているとセキュリティのアップデートを自動で行ってくれますが、アップデート後に再起動が有効になっていないか確認します。/etc/apt/apt.conf.d/50unattended-upgradesの下記の記述がfalseであることを確認します。

1
2
3
// Automatically reboot *WITHOUT CONFIRMATION*
// if the file /var/run/reboot-required is found after the upgrade
Unattended-Upgrade::Automatic-Reboot "false";

ハードウェア故障を疑う

以前書いたのですがCPUの熱を疑ってlm-sensorsというパッケージを使用して定期的にハード関連のログを取得するようにしました。やり方は前述の記事見てください。

その他


最後のlm-sensorsを使用したログ出力で温度計がアカンくさいのはわかったのですが、これ以上わかりませんでした…。