위치에 따라 Linux 시간대 자동 설정


19

인터넷을 사용하여 Linux에서 시스템 기본 시간대를 자동으로 설정하는 방법은 무엇입니까? 보시다시피 NTP 서버는 시간대 만 업데이트 할 수 있지만 시간 만 업데이트 할 수 있습니다. 시간대를 변경할 수있는 서버가 있습니까?


1
시간대가 일광 절약 시간제에서 표준 시간으로 변경되는 것입니까?
slm

여기에는 두 가지가 있습니다. 1. 국가에 변화가있는 경우 2. 일광 절약 시간제에 변화가 있다면 둘째.
임베디드 프로그래머

ntp 서버는 일광 절약 시간의 변경 사항을 자동으로 처리합니다. 나는 당신의 위치를 ​​감지하고 시간대를 자동으로 업데이트하는 서버를 모른다 (휴대 전화처럼).
drs September

2
@drs보다 정확하게는 NTP는 시간대를 전혀 신경 쓰지 않습니다. NTP 시간은 UTC, 단순하고 단순하며 시간대 변환은 클라이언트가 수행하는 것입니다. 특정의 NTP 클라이언트는 수도 시간대 변환을 수행, 또는 그렇지 않을 수도 있지만, 대부분의 * nix에서 스크립트 시스템 어쨌든 UTC를 시스템 클럭이 설정되어 있기 때문에, 그것은 필요가 없습니다.
CVn

답변:


36

나는 이것을 수행하는 프로그램을 얼마 전에 작성했다 : tzupdate .

다음을 실행하여 시간대를 실제로 설정하지 않은 것을 볼 수 있습니다 tzupdate -p.

$ tzupdate -p
Europe/Malta

tzupdate루트 로 실행하여 실제로 설정할 수 있습니다 .

$ sudo tzupdate
Europe/Malta
$ date
Thu 12 Sep 05:52:22 CEST 2013

이것은 다음에 의해 작동합니다.

  • 현재 IP 위치 정보
  • 해당 위치의 시간대 가져 오기
  • /etc/localtime해당 시간대의 zoneinfo 파일을 가리 키도록 에서 심볼릭 링크 업데이트

6

이것은 오래된 스레드이지만 시간대가 자동으로 변경되지 않는 kubuntu 1710과 관련이 있습니다. tzupdate에 Chris Down의 솔루션을 사용하고 있지만 시스템이 네트워크 (wifi 또는 기타)에 연결하려고 할 때 트리거되도록합니다. 네트워크 관리자를 사용한다고 가정합니다.

먼저 터미널을여십시오.

  1. tzupdate 설치

    sudo apt install python-pip
    pip install -U tzupdate
    

    그런 다음 모든 사용자가 액세스 할 수 있는지 확인하십시오.

    sudo cp -R ~/.local/lib/python2.7/site-packages/. /usr/lib/python2.7/.
    sudo cp /home/marta_riba/.local/bin/tzupdate /usr/local/bin/tzupdate
    
  2. 그것이 작동하는지 테스트

    sudo tzupdate
    
  3. 그런 다음 모든 사용자가 액세스 할 수 있는지 확인해야합니다.

    sudo su -
    tzupdate
    

    루트로 들어가서 명령이 시간대를 변경하는지 확인합니다. 그런 다음 일반 사용자로 돌아가려면 종료하십시오.

    exit
    
  4. 비밀번호없이 tzupdate를 sudo로 실행할 수 있는지 확인하십시오. 이것은 백그라운드에서 이것을 실행하는 networkmanager에서 이것을 트리거 할 때 이후 단계에 필요합니다. sudoers 파일을 편집하려면 이것을 터미널에 입력하십시오

    sudo visudo
    

    파일 끝에이 줄을 추가하십시오

    ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
    

    CTRL-X를 누르고 Y를 누른 다음 ENTER를 눌러 변경 사항을 저장하십시오.

  5. 그런 다음 네트워크 연결 변경을 트리거 한 후 (예 : Wi-Fi에 연결할 때) NetworkManager가 항상이를 호출하는지 확인합니다. 이를 위해 dispatcher.d 폴더에 tzupdate라는 파일을 만들어 sudo tzupdate를 호출합니다. 파일을 실행하려면 실행 권한이 필요합니다

    echo 'sudo tzupdate'| sudo tee /etc/NetworkManager/dispatcher.d/99-tzupdate
    sudo chmod +x /etc/NetworkManager/dispatcher.d/99-tzupdate
    

    NetworkManager는 일반적으로 암호를 묻는 sudo (즉, sudo tzupdate)를 호출합니다.

    이 작업을 수행하는 더 좋은 방법이있을 수 있습니다. 예를 들어 NetworkManager가 연결을 가져오고 연결을 끊을 때만 호출합니다 (위와 같이). 스크립트를 / etc / network / if-up에 넣었습니다. .d 그러나 이것은 나를 위해 일하지 않았다

  6. 쿠분투에서 이것을 테스트하려면-현지 시간대를 다른 것으로 변경하십시오 (작업 표시 줄의 날짜 플라스미드로 이동하여 마우스 오른쪽 버튼을 클릭하고 '날짜 / 시간 조정'을 선택한 다음 탭에서 '시간 영역'을 선택하십시오)

    Wi-Fi를 껐다가 다시 켜십시오-일단 Wi-Fi에 연결되면 약 30 초 동안 기다린 다음 시간대를 성공적으로 변경해야합니다.

    이것은 웹 페이지에 암호를 입력 해야하는 wifi에서 테스트되지 않았습니다. 잘만되면 이것이 네트워크 연결의 맨 끝에서 실행된다는 사실은 사용자가 자격 증명을 입력 할 수있는 충분한 시간을 제공해야합니다. 인터넷에 연결할 수없는 경우 X 초 동안 Y 번 다시 시도


2
2018 년에 이것이 여전히 올바른 대답이라는 것은 너무 나쁩니다. 나는 Gnome이 이것을 처리 할 패키지 (gnome-clocks)를 가지고 있다고 생각하지만 KDE에는 현재 다른 좋은 해결책이 없습니다.
카디 네이터

"if ["$ 2 "="up "]"을 수행하여 명령을 실행하기 전에 네트워크 연결이 작동 중인지 확인할 수 있습니다. 두 번째 매개 변수는 NM이 호출 한 상태입니다.
flamusdiu

-2

"시간대 업데이트"의 의미가 확실하지 않습니다.

유닉스와 리눅스는 1970 년 1 월 1 일 00:00 UTC 이후의 시간을 초 단위로 유지합니다. 따라서 유닉스 시스템 클럭은 표준 시간대와 무관합니다. Linux 커널에는 시간대가 없습니다. 1970 년 이후의 시간 (초)이 시간대를 사용하여 해석 된 시간이 사용자 공간 응용 프로그램에 표시되는 경우에만 해당됩니다. 일반적으로이 해석은 C 라이브러리 함수를 통해 수행됩니다. 시간대는 TZ환경 변수에 의해 선택됩니다 . 표준 시간대 정의 (표준 시간대 이름, UTC에서 오프셋, 일광 절약 시간 제가 적용되는 날짜 및 DST 동안의 오프셋으로 구성됨)는 GNU libc의 일부이며 일반적으로 "tzdata"패키지로 Linux 배포에 포함됩니다. 따라서, 시간대 정의를 업데이트하는 것은 실행의 문제이다 apt-get upgrade, yum update또는 이와 유사한 작업을.

Java와 같은 일부 소프트웨어에는 자체 시간대 정의 파일이 있으며 별도로 업데이트해야합니다.

NTP는 UTC 1900 년 1 월 1 일 이후의 시간 (초)을 추적합니다 . 따라서 UNIX 커널과 같이 NTP에는 시간대 개념이 없습니다.


2
시간대 업데이트, "date"명령이 / etc / localtime 시간대에 따라 시간과 날짜를 인쇄하는 것을 볼 수 있습니다. / usr / share / zoneinfo / America / Los_Angeles의 심볼릭 링크를 만들어 시간대를 수동으로 변경할 수 있습니다. 그러나 이것은 수동적 인 방법입니다. 원하는 경우 수동으로 수행하지 않고 현재 국가의 시간대를 자동으로 업데이트해야합니다.
임베디드 프로그래머

간단히 말해서, 현지화 된 시간이며 자동화 된 시간대 업데이트는 많은 여행을하는 사람들에게만 필요합니다.
Cestarian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.