web-dev-qa-db-ja.com

Linuxシステムの時間は一時的にジャンプします

一部の(ハードウェア)サーバーで奇妙なシステム時刻の変更動作を見た:/ var/logs/syslogで、各ログメッセージの前の日付時刻が次のようにランダムなものに変わり、次のメッセージで通常に戻ることがある:

 2018年2月22日09:09:30 ... 
 2018年2月22日09:09:32 ... 
 Jan 13 2610 15:37:42 ... 
 2018年2月22日09:09:33 ... 
 2018年2月22日09:09:34 ... 

例のように、日付時刻の突然の変化は、何百年も離れている可能性があります。

奇妙なタイムスタンプが付いたログメッセージが特定のプロセスからのものではないことを確認できます。それは、すべてのプロセスでランダムに発生する可能性があるだけです。

そして、2つの異常な時間の変化の間の期間は数分から数時間の間で変化します(ただし、異常な時間の変化はより頻繁に発生する可能性がありますが、毎秒ログを書き込んでいないため、それらの多くはsyslogで明らかにされていません)。

また、複数のサーバーで発生するので、ハードウェアの問題ではないと思います。

サーバーに関する詳細:1つのコントローラーといくつかの計算ノードを備えたオープンスタックインストールです。各サーバーでntpサービスが実行されています。コントローラーは、それ自体のハードウェアクロックから時間がかかるように構成されており、計算ノードサーバーは、コントローラーから時刻を同期します。各サーバーには独自のペースで異常な時間の変化があることに注意してください。「間違った時間」はコントローラーからntpを介して同期されていないようです。

計算ノード上のゲストシステム(仮想マシン)がホストシステムの時間に影響を与える可能性があると考えていました。ただし、仮想マシンを実行していないときにコントローラーに同じ問題が発生する理由を説明することはできません。

検出する方法が必要です。システムの時刻を変更したのは誰ですか?

8
Zhaohui Yang

このスクリプトは、時間のずれが発生したこととプロセスツリーの違いを通知します。これは、システムの時刻を変更するプロセスが原因である場合に、これを特定するのに役立ちます。端末に出力するだけでなく、現在の作業ディレクトリ内のtimedrift.logにログインします。

#!/bin/bash

oldTime="$(date +%s)"
oldPsOutput="$(ps faux)"
while true; do
  sleep 1;
  currentTime="$(date +%s)"
  oldTimeplusfive="$((($oldTime+5)))"
  currentPsOutput="$(ps faux)"
  if [[ "$currentTime" -lt "$oldTime" ||  "$currentTime" -gt "$oldTimeplusfive"  ]]
  then
    (
        echo -e '\n\n======================='
        echo "currentTime=$currentTime oldTime=$oldTime oldTimeplusfive=$oldTimeplusfive"
        echo '-----------------------'
        echo "$oldPsOutput"
        echo '::::::::::::::::::::::::::'
        echo "$currentPsOutput"
    ) | tee -a timedrift.log
  fi
  oldPsOutput=$currentPsOutput
  oldTime=$currentTime
done

ストーンがコメントとして述べたCRONバグの原因不明の時間ジャンプの元のスクリプトのクレジット。

Rsyslogを使用しているかのようにコメントできますか? rsyslogの領域の外(Apacheログなど)に表示されますか?このバグは単純に見えますが、確認するか、いずれかの方法で除外するといいでしょう。

1
Citizen Kepler

実際、これは@Stoneのコメントの複製です。これが答えを持っていることを皆に明確にしてください。

つまり、私が使用しているrsyslogのバージョンにバグがあります。受信したsyslogメッセージを任意の時間遅延させます。 バグレポートはこちら そして、rsyslogをアップグレードすると問題が解決しました。カーネルやCRONのせいではありません。

0
Zhaohui Yang