고쳐 쓰다

고쳐 쓰다

심볼릭 링크는 /etc/localtime다음과 같습니다.

===> ls -l /etc/localtime 
... /etc/localtime -> /usr/share/zoneinfo/Europe/Berlin

환경 변수에 이 정보를 제공해야 합니다 TZ.

이것은 작동합니다:

===> TZ=US/Pacific last reboot| head
reboot   system boot  4.4.0-34-generic Thu Aug 25 02:12   still running
reboot   system boot  4.4.0-34-generic Wed Aug 24 02:14   still running

하지만 다음은 그렇지 않습니다.

===> TZ=Europe/Berlin last reboot| head
reboot   system boot  4.4.0-34-generic Thu Aug 25 11:12   still running
reboot   system boot  4.4.0-34-generic Wed Aug 24 11:14   still running

그러나 그것은 (from위키피디아 시간대)

===> TZ=DE last reboot| head
reboot   system boot  4.4.0-34-generic Thu Aug 25 09:12   still running
reboot   system boot  4.4.0-34-generic Wed Aug 24 09:14   still running

TZ링크를 기반으로 설정방법을 검색해봤습니다 /etc/localtime.

이는 자동화되어야 하며 모든 시간대에서 작동해야 합니다.

마지막 -- 버전: util-linux 2.27.1

===> cat /etc/adjtime
0.0 0 0.0
0
LOCAL

고쳐 쓰다

내부 데이터베이스의 기록이 잘못된 것 같습니다.

root     pts/20       127.0.0.1        Thu Aug 25 13:29 - 13:29  (00:00)
modwork_ pts/17       127.0.0.1        Thu Aug 25 10:38 - 11:37  (00:59)
modwork_ pts/18       127.0.0.1        Thu Aug 25 10:05 - 10:19  (00:13)
tguettle tty7         :0               Thu Aug 25 09:12    gone - no logout
reboot   system boot  4.4.0-34-generic Thu Aug 25 11:12   still running

답변1

하드웨어 시계가 UTC가 아닌 현지 시간으로 실행되므로 부팅 타임스탬프가 잘못 저장됩니다. (이는 LOCAL의 항목으로 /etc/adjtime.) last이는 조정되지 않았으므로 표시되는 시작 시간은 시간대와 UTC(현재 베를린에서는 2시간) 간의 차이에 따라 변경됩니다. 하드웨어 시계를 UTC로 변경하는 것 외에는 이 문제를 해결할 수 있는 방법이 없다고 생각합니다!

이 답변의 나머지 부분은 실제 질문과 관련이 없지만 TZ및 을 고려할 때 여전히 관련이 있습니다 /etc/localtime.

일반적으로 파일 기반 값을 사용하려면 TZ파일 이름 앞에 접두사를 붙여야 합니다 :(참조tzset(3)세부):

TZ=:Europe/Berlin last reboot|head

이는 으로 사용할 수 있는 모든 항목에 적용됩니다 . /etc/localtime필요한 경우 TZDIR기본 위치를 재정의하는 데 사용할 수 있습니다 ( /usr/share/zoneinfo).

(이것은 glibc;을 사용하여 Linux를 실행한다고 가정하고 :구현에 따라 다릅니다 .POSIX에 의해 정의됨. Linux에서는 :두 가지 형식이 모두 시도되므로 일반적으로 필요하지 않습니다 TZ. )

답변2

미국/태평양8월 25일 목요일 02:12 유럽/베를린8월 25일 목요일 11시 12분, 베를린 시간은 미국 태평양 표준시보다 9시간 빠르기 때문입니다.

$ TZ=US/Pacific date -d 'Thu Aug 25 02:12' +%s
1472116320
$ TZ=Europe/Berlin date -d 'Thu Aug 25 11:12' +%s
1472116320

UTC 오프셋 보기:

$ TZ=Europe/Berlin date +%z
+0200
$ TZ=US/Pacific date +%z
-0700

두 번째 예일하다. 이게 3번째가 아닌데일하다.

TZ=DE표준( XXX[offset][YYY[dstoffset]]) 영역 정의는 문자 2개에 불과하고 /usr/share/zoneinfo에 호출되는 파일이 없을 수 있으므로 유효하지 않으므로 DE기본값은 UTC 시간입니다.

$ TZ=DE date +%z
+0000

베를린 시간 9시 12분(예: Unix 시간 1472109120)에 시스템을 부팅했다면 이는 이 항목이 추가된 시점보다 시계가 2시간 늦었다는 의미입니다 wtmp.

init이는 시스템이 부팅될 때 가장 먼저 수행하는 작업 중 하나입니다. 이는 일반적으로 네트워크 시간 동기화 서비스(시계 수정)가 시작되기 전입니다. 너의 다른옳은wtmp 항목은 첫 번째 사람이 로그인했을 때 시계가 고정되었음을 나타냅니다.

시스템이 멀티 부팅이고 다른 시스템 중 하나가 Microsoft에서 만든 경우 Microsoft 시스템에는 기본적으로 하드웨어 시계를 UTC 대신 현지 시간으로 설정하기 때문에 버그/버그 기능이 있다는 점에 유의하십시오. 따라서 Unix 계열 운영 체제에서 하드웨어 시계를 UTC로 예상하면 충돌이 발생하고 Microsoft 운영 체제에서 부팅할 때 운영 체제는 하드웨어 시계를 UTC에서 현지 시간으로 변환하려고 시도합니다. Unix 운영 체제는 그 반대를 수행합니다.

~에 따르면거기, 불가능해 보인다고정시키다Microsoft OS이므로 Unix OS에 하드웨어 시계를 (Windows와 마찬가지로) 현지 시간으로 설정하도록 지시하여 이 문제를 해결하고 모든 OS가 현지 시간의 의미에 동의하는지 확인해야 합니다. 이) DST 변경 중에는 시스템을 종료하거나 재부팅하지 마십시오. 예를 들어, 현재 Debian 시스템에서는 in UTC으로 변경하면 LOCAL됩니다 /etc/adjtime.

이제 adjtime를 포함했으므로 LOCAL해당 가정은 제거됩니다. 다른 가능성: 시계가 UTC로 설정된 다른 시스템이 있거나 현지 시간이 UTC로 설정된 Microsoft 시스템입니다. LOCAL으로 변경하면 UTC문제가 해결될 수 있습니다.

또는 더 일반적으로는 시스템의 모든 운영 체제가 하드웨어 시계 설정 위치에 동의하도록 하려고 합니다.

관련 정보