인터넷을 사용하여 Linux에서 시스템 기본 시간대를 자동으로 설정하는 방법은 무엇입니까? 내가 아는 한, NTP 서버는 시간대가 아닌 시간만 업데이트할 수 있습니다. 시간대를 변경할 수 있는 서버가 있나요?
답변1
나는 얼마 전에 다음과 같은 프로그램을 작성했습니다.업데이트 시간.
다음 명령을 실행하면 시간대를 실제로 설정하지 않고 무엇으로 설정하는지 확인할 수 있습니다 tzupdate -p
.
$ tzupdate -p
Europe/Malta
루트로 실행하여 설정할 수 있습니다 tzupdate
.
$ sudo tzupdate
Europe/Malta
$ date
Thu 12 Sep 05:52:22 CEST 2013
이는 다음을 통해 달성됩니다.
- 현재 IP의 위치를 확인하세요
- 해당 위치의 시간대를 가져옵니다.
/etc/localtime
해당 시간대의 zoneinfo 파일을 가리키도록 심볼릭 링크를 업데이트하세요 .
답변2
이것은 오래된 스레드이지만 시간대를 자동으로 변경하지 않는 kubuntu 1710과 여전히 관련이 있습니다. 저는 Chris Down의 tzupdate 솔루션을 사용하고 있지만 시스템이 네트워크(WiFi 또는 기타)에 연결을 시도할 때 이 솔루션이 트리거되는지 확인하고 있습니다. 이는 Network Manager를 사용하고 있다고 가정합니다.
먼저 터미널을 엽니다.
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
비밀번호 없이 sudo를 사용하여 tzupdate를 실행할 수 있는지 확인하세요. 이 명령은 백그라운드에서 이 명령을 실행하는 네트워크 관리자에서 이 명령을 트리거할 때 후속 단계에 필요합니다. sudoers 파일을 편집하려면 터미널에 이 명령을 입력하세요.
sudo visudo
파일 끝에 이 줄을 추가하세요.
ALL ALL=(root) NOPASSWD: /usr/local/bin/tzupdate
변경 사항을 저장하려면 CTRL-X, Y, ENTER를 차례로 누르세요.
그런 다음 네트워크 연결 변경을 트리거한 후(예: WiFi에 연결할 때) 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 하지만 이것은 나에게 작동하지 않습니다
쿠분투에서 테스트하려면 - 현지 시간대를 다른 시간대로 변경하세요(작업 표시줄에서 "Date Plasma"로 이동하여 마우스 오른쪽 버튼을 클릭하고 "날짜/시간 조정"을 선택한 다음 탭에서 "시간대"를 선택하세요)
Wi-Fi를 껐다가 다시 켜면 Wi-Fi에 연결되면 약 30초 정도 기다린 후 시간대가 성공적으로 변경되는 것을 볼 수 있습니다.
Wi-Fi에서는 테스트되지 않았으며 웹페이지에 비밀번호가 필요합니다. 네트워크 연결이 끝날 때 실행된다는 사실이 사용자가 자격 증명을 입력할 수 있는 충분한 시간을 제공하기를 바랍니다. 그렇지 않으면 추가 조정이 필요할 수 있습니다(연결이 존재하는지 확인하고, 인터넷에 연결할 수 있는지 확인하고, 잠시 기다려주세요). 인터넷에 연결할 수 없는 경우) X초 후 Y번 다시 시도하세요.
답변3
답변4
"시간대 업데이트"가 무엇을 의미하는지 명확하지 않습니다.
Unix와 Linux는 1970년 1월 1일 00:00 UTC 이후의 시간을 초 단위로 기록합니다. 따라서 Unix 시스템 시계는 시간대에 독립적입니다. Linux 커널에는 시간대가 없습니다. 사용자 공간 응용 프로그램이 시간을 표시하는 경우에만 시간대가 1970년 이후의 초를 해석하는 데 사용됩니다. 일반적으로 이 해석은 C 라이브러리 함수를 통해 수행됩니다. 시간대는 환경 변수에 의해 선택됩니다 TZ
. 시간대 정의(시간대 이름, UTC와의 오프셋, 일광 절약 시간이 적용되는 날짜, DST 중의 오프셋으로 구성됨)는 일반적으로 Linux 배포판에 "tzdata" 패키지로 포함되는 GNU libc의 일부입니다. . 따라서 시간대 정의를 업데이트하는 것은 실행 또는 유사한 작업의 문제일 apt-get upgrade
뿐입니다 yum update
.
일부 소프트웨어(예: Java)에는 별도로 업데이트해야 하는 자체 시간대 정의 파일이 있습니다.
NTP는 1900년 1월 1일 UTC 이후의 초 수를 기록합니다.. 따라서 Unix 커널과 마찬가지로 NTP에는 시간대 개념이 없습니다.