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


377

배터리 기반 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입니까?


2
[여기]에서 [1] : ntpdate -s ntp.ubuntu.com [1] : askubuntu.com/a/81301/130162
18446744073709551615

4
ntpdate에서 '-b'플래그를 확인하십시오. ntpdate의 매뉴얼 페이지에서 : "adjtime () 시스템 호출을 사용하여 회전 (기본값)하는 대신 settimeofday () 시스템 호출을 사용하여 시간을 강제 실행하십시오.이 옵션은 부팅시 시작 파일에서 호출 될 때 사용해야합니다." 아래의 많은 답변에는 포함되어 있지 않으며 일을 처리하는 데 문제가 될 수 있습니다. 기본 '슬루'메커니즘을 사용하여 128ms 이상의 오프셋을 동기화하는 데 몇 시간이 걸릴 수 있다고 언급 한 '-B'플래그를 고려하십시오
Matt S.

sudo/etc/rc.locale 파일에서 사용할 필요는 없습니다 . 이미 루트로 실행되었습니다.
Soren A

timedatectl, 그러나 askubuntu.com/questions/832646/…
nobar

답변:


325

아마도 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 )&

감사. 왜 명시적인 경로가 필요한지 설명해 주시겠습니까?
ysap

1
나는 정말로 모른다. :-) servicerc.local 및 cron에서 실행하려고 시도했지만 문제가 있었지만 대신 /etc/init.d/xxx를 사용하여 문제를 해결했습니다. 실제로 나는 당신에게 전체 경로를 줄 필요가 없다고 생각합니다 ntpdate. 올바른 파일을 찾을 수 있도록 스크립트에 전체 경로를 사용하고 싶습니다.
Eric Carvalho

2
좋아, 이것은 분명히 문제였다. 이제 네트워크 연결이 설정되는 즉시 시계가 업데이트됩니다. 감사.
ysap

3
나는 us.pool.ntp.org더 반응이 좋다는 것을 알았습니다 .
ysap

7
-u옵션을 사용하면 ntp 서비스를 중지 할 필요가 없습니다.sudo ntpdate -u time.nist.gov
Edward Anderson

486

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

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

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


3
감사. 이 명령 이후에도 1970 년이 계속 표시됩니다 (w / sudo). ntpd맨 페이지를 읽고 있는데 이것이 어떻게 업데이트를해야할지 모르겠습니까?
ysap

12
"-q"옵션은 NTP 데몬에게 시작, 시간 설정 및 즉시 종료를 지시합니다. "-g"옵션을 사용하면 1000 초보다 큰 시차를 보정 할 수 있습니다. 장기적으로 NTP 데몬이 항상 실행되도록 구성해야합니다.
tgharold

35
ntpdate는 더 이상 사용되지 않으며 ntp와 충돌하기 때문에 설치하는 것이 좋지 않습니다. 시계가 꺼져 있으면 ntp가 시계를 변경하지 않고 이유를 알려주지 않기 때문에이 수동 단계를 수행해야합니다.
Liam

31
나를 위해, sudo ntpd -gq종료하지 않습니다! 나는 14.10에 있고 계속하려면 CTRL + C를해야합니다 ... 또는 얼마나 오래 걸리나요?
Yanick Rochon

5
참고로, 내 시스템 (CentOS 6.6)에서의 두 인스턴스를로 변경해야 sudo service ntp...했습니다 sudo service ntpd....
rinogo

63

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

sudo sntp -s 24.56.178.140

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


1
작동했습니다! +1
CappY

7
이것은 "sudo ntpd -gq"가 그렇지 않을 때 작동했습니다.
Matt White

이 답변을 몇 번이나 검색했는지 모르겠습니다. 매번 작동합니다.
Chaos

1
sntp 패키지를 찾을 수 없습니까?
사원

1
apt-get install sntp / yum install sntp (예, CentOS, RedHat, fedore에서도 작동합니다)
ndemou

40

다른 사람들이 지적한 것처럼 가장 좋은 해결책은 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으로 시계가 설정됩니다. 이것은 부팅 할 때 네트워크 문제가있는 경우 다소 정확한 시계를 가질 수 있음을 의미합니다.


1
-g(명령 행, 내가이없는에서 나를 위해 아무것도 할 듯 /etc/default/ntp)하지만, 추가 tinker panic 0ntp.conf
데이브 Cousineau

@Sahuagin 비표준 ntp 패키지가 아닌 것 외에는 무엇을 말 해야할지 모르겠습니다. / etc / default / ntp는 Ubuntu 패키지의 일부입니다 : packages.ubuntu.com/xenial/amd64/ntp/filelist 및 -g는 내가 기억할 수있는 한 옵션이었습니다.
dfc

죄송합니다. 실제로 Ubuntu를 사용하고 있지 않기 때문에 댓글을 달기 전에 조금 더 생각해야했을 것입니다. tinker panic 0그래도 분명히 효과가 있었던 것 같습니다.
Dave Cousineau

13

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

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


답변이 업데이트되었습니다.
Stephan

1
ntpdate가 단계적으로 중단되지 않았습니까? 또한 이것을 올바르게 이해하면 서비스가 실행되고 로컬 시계와 서버 시계의 동기화가 유지되므로 드리프트가 바인딩됩니다. ntp를 제거하고 ntpdate를 한 번 실행하면 기기가 오랫동안 켜져있을 때 시계 표류의 영향을받지 않습니까?
ysap

스테판, 질문 # 2 업데이트를 참조하십시오.
ysap

3
예, ntpdate가 단계적으로 종료되고 있습니다. "ntpd -q"를 사용하는 것이 좋습니다 (두 변형 모두 ntpd를 먼저 중지해야합니다).
tgharold

11

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

sudo systemctl restart systemd-timesyncd.service

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

참고


이것은 우분투 19.04에서 작동했습니다. 감사!
krubo

10
rdate -s tick.greyware.com

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


감사. 현재이 명령을 검사 할 시스템이 없지만 질문에 대한 토론과 허용 된 답변을 따르면 시계 업데이트 명령을 실행할 때 문제가 실제로 네트워크를 사용할 수 없다는 것을 알 수 있습니다.
ysap

이것은 내 라즈베리 파이에서 시간 동기화 문제를 해결했습니다. 감사합니다.
Oliver Spryn

7

데비안 / 민트 / 우분투 (또는 다른 데비안 파생물) 시스템 에서이 작업을 수행하는 올바른 방법은

NTPD_OPTS="-g"

파일에서

/etc/default/ntp

이는 ntpd가 /etc/init.d/ntp 스크립트에서 시작될 때 "-g"옵션 viz로 실행되도록합니다.

 start-stop-daemon --start --quiet --oknodo --pidfile /var/run/ntpd.pid --startas /usr/sbin/ntpd -- -p /var/run/ntpd.pid -g -u 124:128

예를 들어 하드웨어 RTC가 없기 때문에 시작시 시스템 시간이 1970 년 1 월 1 일인 경우 ntpd가 1000 초 이상인 경우 시스템 시간을 수정합니다.


나는 이미 그것을 가지고 있지만, 오후 11 시가되어야하는 NY의 3AM이라고 여전히 말합니다.
chovy

나도 이미 그 라인을 가지고 /etc/default/ntp있었지만 시간은 동기화되지 않았습니다.
Dawid Ferenczy Rogožan

5

tlsdateTLS를 사용하여 원격 서버에 안전하게 연결하고 보안 핸드 셰이크에서 원격 시간을 추출하여 로컬 시계를 설정합니다. 달리 ntpdate, tlsdateTCP는 원격 HTTPS 연결 예를 들어, 사용 또는 TLS 서비스를 활성화하고, 당신에게 악성 시간 정보를 공급하려고 원수에 대한 몇 가지 보호 기능을 제공합니다.

$ tlsdate -V -n -H encrypted.google.com

5

현재 일부 Ubuntu 기반 시스템은 기본적으로 NTP 서비스를 사용하지 않습니다. 내 Linux Mint 19 (Ubuntu 18.04) 시스템에서 시간은 systemd-timesyncd입니다.

동기화를 잃은 후 최신 시간을 얻으려면 방금 실행합니다.

sudo systemctl restart systemd-timesyncd

15.04부터 Ubuntu는 기본적으로 systemd를 사용합니다. 따라서 시간과 같은 중요한 시스템은 systemd를 통해 관리됩니다. 시스템에서 사용중인 서비스를 찾으려면 다음과 같이 실행하십시오.

systemctl list-unit-files | grep -E 'ntp|timesyncd'

16.04의 TechJS의 경우 서비스는 다음과 같습니다 ntp. 우분투 18.04 (Mint 19)에 대한 서비스는 systemd-timesyncd입니다. 흥미롭게도, 나는 가지고있는 16.04 서버에 로그인했으며 그것을 사용 systemd-timesyncd합니다.


감사. 질문을 게시한지 오랜 시간이 지났지 만 테스트 할 시스템이 없지만 @TechJS와 어떻게 다른지, 특히 제안한 명령이 약간 다른지 자세히 설명 할 수 있습니까?
ysap

고마워 그것은 당신뿐만 아니라 미래의 최신 정보 (자신과 같은)없이 여기에서 자신을 찾는 사람에게도 응답했습니다. 답변에 도달하는 방법에 대해보다 구체적으로 답변을 업데이트했습니다.
Aaron Chamberlain

4

-b옵션을 사용하여 시간을 단계적으로 시도하십시오 .


2
커맨드 라인에서 시도 할 때 다음과 같은 응답을 얻습니다 1 Jan 00:04:11 ntpdate[2226]: the NTP socket is in use, exiting . 그러나 나는 이것을 전에 시도했지만 rc.local도움이되지 않았다고 생각합니다 .
ysap

3
실행하기 전에 먼저 ntp 서비스를 중지해야합니다.ntpdate -b <ipaddress>
Wim Deblauwe

2

잘,

hwclock이없는 라즈베리 파이에서 라즈 비안 (debian wheezy)을 실행하고 있습니다. 인터넷 인터페이스가 가동 된 후에 작은 스크립트를 작성하고 실행하는 것이 편리하다는 것을 알았으므로 네트워크를 사용할 수있게되는 순간 시계가 업데이트됩니다.

먼저 다음 ntpdate을 실행 하여 패키지 가 있는지 확인하십시오.

sudo apt-get update
sudo apt-get install ntpdate

당신은 다음을 추가해야합니다 /etc/network/interfaces(확실히 eth0여기 예제입니다) :

auto eth0
    iface eth0 inet dhcp
    post-up /usr/local/sbin/update-time.sh

에서 다음 스크립트 /usr/local/sbin/update-time.sh를 작성하십시오 (로 실행 가능하게하는 것을 잊지 마십시오 chmod) :

#!/bin/bash
# This script checks if the ntp process is running, stops it, updates the system time, starts it again

ps cax | grep -c ntpd > /dev/null
onoff=$?
if [ "$onoff" -gt 0 ]; then
    echo "stopping ntpd..."
    service ntp stop
    echo "ntpd stopped"
else
    echo "ntpd not running, ready to update the date"
fi


isinstalled=$(dpkg-query -l | grep -c ntpdate)
if [ "$isinstalled" -gt 0 ]; then
    ntpdate -t 3 -s ntp4.stratum2.ru
    echo "date and time update executed"
else
    echo "ntpdate package not installed, can't update using ntp"
fi

echo "restarting ntpd..."
service ntp start 
echo "ntpd running"
echo "printing current date and time:"
date

exit

1

샘플 오프셋의 절대 값이 128ms보다 작은 간격이 900을 초과하지 않는 한, ntpd 알고리즘은 128ms를 초과하는 샘플 오프셋을 버립니다. 그 후의 첫 번째 샘플은 오프셋이 무엇이든 시계를 표시된 시간으로 이동합니다. 실제로 이것은 클럭이 오류 발생 단계에서 사라지는 낮은 알람 비율을 감소시킵니다.

일반적으로 오프셋이 상한선 한계 (기본적으로 1000 초)를 초과하면 ntpd가 종료됩니다. -g 옵션을 사용하여 끌 수 있습니다.

-g 일반적으로 오프셋이 상한 한계 (기본적으로 1000 초)를 초과하면 ntpd가 종료됩니다. 위생 한계가 0으로 설정되면 위생 검사가 수행되지 않고 오프셋이 허용됩니다. 이 옵션은 제한을 무시하고 시간을 제한없이 임의의 값으로 설정할 수 있습니다. 그러나 이것은 한 번만 발생할 수 있습니다. 그 후, 한계를 초과하면 ntpd가 종료됩니다. 이 옵션은 -q 옵션과 함께 사용할 수 있습니다.

둘 다 http://doc.ntp.org/4.1.0/ntpd.htm에서

조나단 나탈 레


1

시스템 동기화에 걸리는 시간을 충분히 줄 수있는 경우 다음 ntp-wait명령을 사용할 수 있습니다 .

ntp-wait || exit -1 
# i believe this would exit the script if it fails, but not sure of ntp-wait return codes, learn this first.

echo Time is synced, go ahead with backup
tar
rsync etc.

1

시스템이 켜져 있으면 다음 명령을 사용할 수 있습니다.

sudo systemctl restart ntp
# or
sudo systemctl restart ntp.service

그리고 10-15 초 안에 시간이 업데이트됩니다.
우분투 메이트 16.04에서 테스트


0

ntpdntpdate제한된 포트 (UDP 123)를 사용하여 기본적으로 실행합니다. 방화벽 뒤에 있으면 ntpd작동하지 않지만 옵션으로 ntpdate작업 할 수 있습니다 -u. 예를 들어 : ntpdate -u 0.ubuntu.pool.ntp.org 또는 ntpdate -u time.nist.gov둘 다 정상적으로 작동해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.