리눅스 시스템 시간이 일시적으로 점프


8

일부 (하드웨어) 서버에서 이상한 시스템 시간 변경 동작을 보았습니다 ./var/logs/syslog에서 각 로그 메시지 앞의 날짜 시간이 때때로 임의의 것으로 바뀌고 다음 메시지에서 다음과 같이 정상으로 돌아옵니다.

2 월 22 2018 09:09:30 ...
2018 년 2 월 22 일 09:09:32 ...
1 월 13 2610 15:37:42 ...
2018 년 2 월 22 일 09:09:33 ...
2018 년 2 월 22 일 09:09:34 ...

예에서와 같이 날짜 시간의 급격한 변경은 수백 년이 걸릴 수 있습니다.

이상한 타임 스탬프가있는 로그 메시지가 특정 프로세스에서 온 것이 아니라는 것을 확인할 수 있습니다. 모든 메시지에 대해 무작위로 발생할 수 있습니다.

그리고 두 가지 비정상 시간 변경 사이의 지속 시간은 몇 분에서 몇 시간 사이에 다양합니다 (그러나 비정상적인 시간 변경이 더 자주 발생할 수 있다고 생각하지만 매 초마다 로그를 작성하지 않기 때문에 많은 것이 syslog에 표시되지 않습니다).

또한 둘 이상의 서버에서 발생하므로 하드웨어 문제가 아니라고 가정합니다.

서버에 대한 추가 정보 : 하나의 컨트롤러와 몇 개의 컴퓨팅 노드가있는 오픈 스택 설치입니다. 각 서버에는 ntp 서비스가 실행 중입니다. 컨트롤러는 자체 하드웨어 시계에서 시간이 걸리도록 구성되며 컴퓨팅 노드 서버는 컨트롤러에서 시간을 동기화합니다. 각 서버는 자체 속도에 따라 비정상적인 시간 변경이 있습니다. "잘못된 시간"이 ntp를 통해 컨트롤러에서 동기화되지 않은 것처럼 보입니다.

컴퓨팅 노드의 게스트 시스템 (가상 머신)이 호스트 시스템 시간에 영향을 줄 수 있다고 의심했습니다. 그러나 이것은 가상 머신을 실행하지 않는 동안 컨트롤러에 동일한 문제가있는 이유를 설명 할 수 없습니다.

누가 시스템 시간을 변경했으며 어떻게 발생합니까?를 감지하는 방법이 필요합니다.


2
hwclock루프 의 출력을 보여줄 수 있습니까 ? : 같은 뭔가while true; do hwclock; sleep 5; done
shodanshok

각 서버에는 클라이언트 또는 서버로 ntp 서비스가 실행 중입니까? "old"ntp 서비스를 통해 시스템 외부 또는 시스템 외부를 통해? 나를 위해 이것은 ntp 시간 문제를 제공하는 것처럼 보입니다. 우리는 시간이 동기화되기 전에 (네트워크 연결, 타임 스탬프의 점프를 초래하기 전에) systemd가 systemd [1]에 의존하고 싶은 목표를 가지고 있기 전에 로그 파일을 작성하는이 문제가있었습니다 : 시간이 systemd [1] : 대상 시스템 시간 동기화에 도달했습니다.
Dennis Nolte

일부 날짜 가져 오기가 cron으로 실행되고 있으며 확인 시간이 충분하지 않은 것 같습니다. 그것을 찾아서 제거하고 오랜 시간 드리프트에 응답하지 않는 ntpd로 대체하십시오.
danblack

새로운 결과를 얻었으며 syslog에서 지연되는 CRON 메시지로 문제가 좁힐 수 있음을 발견했습니다. 그래서 다른 질문을 올렸습니다 . 거기를보세요.
Zhaohui Yang

3
아마 이것은 오류입니다 : CRON에서 설명 할 수없는 시간 점프rsyslog-7.4.4-1ubuntu2.7 에서 패치 되었습니다 .
Stone

답변:


1

이 스크립트는 시간 드리프트가 발생하는 시점과 프로세스 트리의 차이를 알려주며, 프로세스가 시스템 시간을 변경하여 발생한 경우이를 식별하는 데 도움이됩니다. 현재 작업 디렉토리 내의 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

Stone이 주석으로 언급 한 CRON 버그에서 설명 할 수없는 시간 점프의 원본 스크립트에 대한 크레딧.

rsyslog를 사용하는 것처럼 댓글을 달 수 있다면 어떤 버전을 사용할 수 있습니까? rsyslog 영역 (예 : 아파치 로그 등) 외부에서 볼 수 있습니까? 이 버그는 비슷해 보이므로이를 확인하거나 어느 쪽이든 배제하는 것이 좋습니다.


0

실제로 이것은 @Stone의 의견과 중복됩니다. 이 답변을 모두에게 명확하게하십시오.

요컨대, 내가 사용하는 rsyslog 버전에 버그가 있습니다. 임의의 시간 동안받은 syslog 메시지를 지연시킵니다. 버그 리포트가 있습니다. rsyslog를 업그레이드하면 문제가 해결되었습니다. 커널이나 CRON의 결함이 아닙니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.