NTP를 사용하여 시계를 업데이트하는 방법은 무엇입니까? 덕분에 명령

배터리 기반 RTC가없는 ARM 기반 임베디드 시스템에서 Ubuntu를 실행하고 있습니다. 깨우기 시간은 1970 년 어딘가에 있습니다. 따라서 NTP 서비스를 사용하여 시간을 현재 시간으로 업데이트합니다.

/etc/rc.local파일에 다음 줄을 추가했습니다 .

sudo ntpdate -s time.nist.gov

그러나 시작 후, 아직 내가 효과적으로 작동하지 않을 수있는 기간 동안 시간이 업데이트 될 때까지 몇 분, 소요 tarmake.

주어진 시간에 시계를 강제로 업데이트하려면 어떻게해야합니까?


업데이트 1 : 다음은 Eric과 Stephan 덕분에 명령 줄에서 잘 작동하지만 넣을 때 시계를 업데이트하지 못합니다 /etc/rc.local.

$ date ; sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start ; date
Thu Jan  1 00:00:58 UTC 1970
 * Stopping NTP server ntpd     [ OK ]
 * Starting NTP server          [ OK ]
Thu Feb 14 18:52:21 UTC 2013

내가 무엇을 잘못하고 있지?


업데이트 2 : 첫 번째 업데이트에 대한 몇 가지 제안을 따르려고했지만 실제로 필요한 작업을 수행하는 것은 없습니다. 내가 시도한 것은 다음과 같습니다.

  1. 서버를 다음으로 교체하십시오. us.pool.ntp.org
  2. 프로그램에 대한 명확한 경로를 사용하십시오
  3. ntp서비스를 모두 제거 하고 그대로 두십시오 sudo ntpdate ....rc.local
  4. 를 제거 sudo위의 명령에서rc.local

위의 방법을 사용하면 머신은 여전히 ​​1970 년에 시작합니다. 그러나 일단 로그인 한 후 (를 통해 ssh) 명령 행에서이 작업을 수행하면 호출하자마자 시계가 업데이트됩니다 ntpdate.

내가 한 마지막 일은 그것을 제거하고 내 파일에 rc.local호출하는 것 ntpdate입니다 .bashrc. 이것은 예상대로 시계를 업데이트하고 명령 프롬프트가 사용 가능 해지면 현재 시간을 얻습니다.

그러나 이는 컴퓨터가 켜져 있고 사용자가 로그인하지 않은 경우 시간이 업데이트를받지 않음을 의미합니다. 물론 ntp서비스를 다시 설치할 수 있으므로 시작 후 몇 분 이내에 시계가 업데이트되지만 다시 정사각형 1로 돌아갑니다.

그렇다면 ntpdate명령을 배치 rc.local해도 필요한 작업이 수행되지 않고 작동 하는 이유는 무엇 .bashrc입니까?



답변

아마도 ntp서비스가 실행 중이므로 ntpdate소켓 (포트 123 UDP)을 열고 ntp 서버에 연결할 수 없습니다.

명령 행에서 시도하십시오.

sudo service ntp stop
sudo ntpdate -s time.nist.gov
sudo service ntp start

이것을 /etc/rc.local사용하려면 다음 을 사용하십시오.

( /etc/init.d/ntp stop
until ping -nq -c3 8.8.8.8; do
   echo "Waiting for network..."
done
ntpdate -s time.nist.gov
/etc/init.d/ntp start )&


답변

사용되지 않는 ntpdate 대신 다음을 사용하십시오.

sudo service ntp stop
sudo ntpd -gq
sudo service ntp start

-gq관계없이 오프셋 (시간을 해결하기 위해 NTP 데몬을 알려줍니다 g(즉시) 및 종료 q시간을 설정 한 후).


답변

sntp를 사용하여 시간을 즉시 설정하십시오. 예를 들면 다음과 같습니다.

sudo sntp -s 24.56.178.140

-s 뒤의 숫자는 임의의 ntp 시간 서버 일 수 있으며,이 숫자는 Ft의 NIST입니다. 콜린스, 콜로라도.


답변

다른 사람들이 지적한 것처럼 가장 좋은 해결책은 ntpd에 공황 임계 값을 무시하도록 지시하는 것입니다. 기본적으로 1000 초입니다. 다음 두 가지 방법 중 하나로 패닉 임계 값을 구성 할 수 있습니다.

  • 편집 /etc/default/ntp및 -g 옵션이 존재 함을 확인합니다.
  • /etc/ntp.conf를 편집 tinker panic 0하고 맨 위에 놓으 십시오

지금까지 이것은 본질적으로 다른 사람들이 권장 한 것이지만, 당신이 취해야 할 단계가 하나 더 있습니다. fake-hwclock 프로그램을 설치하십시오 :

# apt-get install fake-hwclock


fake-hwclock: Save/restore system clock on machines without working RTC hardware

 Some machines don't have a working realtime clock (RTC) unit, or no
 driver for the hardware that does exist. fake-hwclock is a simple set
 of scripts to save the kernel's current clock periodically (including
 at shutdown) and restore it at boot so that the system clock keeps at
 least close to realtime. This will stop some of the problems that may
 be caused by a system believing it has travelled in time back to
 1970, such as needing to perform filesystem checks at every boot.

 On top of this, use of NTP is still recommended to deal with the fake
 clock "drifting" while the hardware is halted or rebooting.

fake-hwclock을 설치하면 컴퓨터가 다시 1970 년이라고 생각하지 않습니다. 컴퓨터가 부팅되면 마지막 재부팅 / 종료시 기록 된 타임 스탬프 fake-hwclock으로 시계가 설정됩니다. 이것은 부팅 할 때 네트워크 문제가있는 경우 다소 정확한 시계를 가질 수 있음을 의미합니다.


답변

ntpdate는 net dameon과는 다른 프로그램입니다. ntpd가 해당 소켓에서 실행 중이므로 NTPDate가 부팅시 오류가 발생했을 수 있습니다.

명령 행에서 다음을 실행하십시오.

# sudo service ntp stop ; sudo ntpdate -s time.nist.gov ; sudo service ntp start

ntpd를 모두 제거하고 (apt-get remove ntp) 매시간마다 ntpdate를 사용하도록 cron 스크립트를 추가 할 수도 있습니다.

최신 정보

ntp 서비스는이 시스템에서 의미있는 가치가 없을 것이므로 먼저 제거하십시오.

# sudo apt-get remove ntp

이제 다음 명령을 추가하십시오 :

ntpdate -sb time.nist.gov

/etc/rclocal

재부팅하십시오. 그 시점에서 잘해야합니다.


답변

사용 timedatectl시간을 설정 (systemd 서비스 단위). ntp더 이상 사용되지 않습니다.

sudo systemctl restart systemd-timesyncd.service

당신은 로그를 읽고 업데이트 된 시간을 확인할 수 있습니다 journalctl -xe | tail

참고


답변

rdate -s tick.greyware.com

시계를 한 번만 설정하면됩니다.