심볼릭 링크는 /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
문제가 해결될 수 있습니다.
또는 더 일반적으로는 시스템의 모든 운영 체제가 하드웨어 시계 설정 위치에 동의하도록 하려고 합니다.