인터넷을 사용하여 Linux에서 시스템 기본 시간대를 자동으로 설정하는 방법은 무엇입니까? 보시다시피 NTP 서버는 시간대 만 업데이트 할 수 있지만 시간 만 업데이트 할 수 있습니다. 시간대를 변경할 수있는 서버가 있습니까?
인터넷을 사용하여 Linux에서 시스템 기본 시간대를 자동으로 설정하는 방법은 무엇입니까? 보시다시피 NTP 서버는 시간대 만 업데이트 할 수 있지만 시간 만 업데이트 할 수 있습니다. 시간대를 변경할 수있는 서버가 있습니까?
답변:
나는 이것을 수행하는 프로그램을 얼마 전에 작성했다 : tzupdate .
다음을 실행하여 시간대를 실제로 설정하지 않은 것을 볼 수 있습니다 tzupdate -p
.
$ tzupdate -p
Europe/Malta
tzupdate
루트 로 실행하여 실제로 설정할 수 있습니다 .
$ sudo tzupdate
Europe/Malta
$ date
Thu 12 Sep 05:52:22 CEST 2013
이것은 다음에 의해 작동합니다.
/etc/localtime
해당 시간대의 zoneinfo 파일을 가리 키도록 에서 심볼릭 링크 업데이트이것은 오래된 스레드이지만 시간대가 자동으로 변경되지 않는 kubuntu 1710과 관련이 있습니다. tzupdate에 Chris Down의 솔루션을 사용하고 있지만 시스템이 네트워크 (wifi 또는 기타)에 연결하려고 할 때 트리거되도록합니다. 네트워크 관리자를 사용한다고 가정합니다.
먼저 터미널을여십시오.
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
그것이 작동하는지 테스트
sudo tzupdate
그런 다음 모든 사용자가 액세스 할 수 있는지 확인해야합니다.
sudo su -
tzupdate
루트로 들어가서 명령이 시간대를 변경하는지 확인합니다. 그런 다음 일반 사용자로 돌아가려면 종료하십시오.
exit
비밀번호없이 tzupdate를 sudo로 실행할 수 있는지 확인하십시오. 이것은 백그라운드에서 이것을 실행하는 networkmanager에서 이것을 트리거 할 때 이후 단계에 필요합니다. sudoers 파일을 편집하려면 이것을 터미널에 입력하십시오
sudo visudo
파일 끝에이 줄을 추가하십시오
ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
CTRL-X를 누르고 Y를 누른 다음 ENTER를 눌러 변경 사항을 저장하십시오.
그런 다음 네트워크 연결 변경을 트리거 한 후 (예 : 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 그러나 이것은 나를 위해 일하지 않았다
쿠분투에서 이것을 테스트하려면-현지 시간대를 다른 것으로 변경하십시오 (작업 표시 줄의 날짜 플라스미드로 이동하여 마우스 오른쪽 버튼을 클릭하고 '날짜 / 시간 조정'을 선택한 다음 탭에서 '시간 영역'을 선택하십시오)
Wi-Fi를 껐다가 다시 켜십시오-일단 Wi-Fi에 연결되면 약 30 초 동안 기다린 다음 시간대를 성공적으로 변경해야합니다.
이것은 웹 페이지에 암호를 입력 해야하는 wifi에서 테스트되지 않았습니다. 잘만되면 이것이 네트워크 연결의 맨 끝에서 실행된다는 사실은 사용자가 자격 증명을 입력 할 수있는 충분한 시간을 제공해야합니다. 인터넷에 연결할 수없는 경우 X 초 동안 Y 번 다시 시도
"시간대 업데이트"의 의미가 확실하지 않습니다.
유닉스와 리눅스는 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에는 시간대 개념이 없습니다.