2012-06-27 4 views
3

저는 BeagleBone을 사용하고 있으며 RTC와 배터리 백업 기능이 내장되어 있지 않기 때문에 재부팅 할 때마다 날짜가 없어집니다. 나는 쉽게 명령을 사용하여 날짜를 설정할 수 있습니다네트워크가 준비된 후에 만 ​​ntpdate를 재부팅 할 때 가장 좋은 방법은 무엇입니까

는/usr/빈/ntpdate를 -b -s -u pool.ntp.org

그러나 전력은 집 밖으로 다시 계속하는 경우 예를 들어, 시간이 손실됩니다. 최신 Beaglebone Angstrom 리눅스 배포판에 포함 된 솔루션은 crontab을 30 분마다 업데이트하는 것입니다. 하지만 전원을 켤 때 한 번 명령을 실행하는 것을 선호합니다.

은 내가 @reboot 라인의 crontab 위에 나열된이 명령을 퍼팅 시도,하지만 난 달아 믿는다 네트워크를 구성하기 전에, 아니면 전원을 뽑아 때 나에게 적절한 시간을하지 않았기 때문에 뭔가 다른 실패 5 분 동안 비글 본으로 돌려 놓습니다.

ifconfig를 사용하여 네트워크를 사용할 수있을 때만 init.d에서 스크립트를 실행할 수 있습니까?

답변

7
opkg install ntp-systemd 
systemctl enable ntpdate.service 
systemctl enable ntpd.service 

편집는 /etc/ntp.conf 다음과 같은 라인을 주석 (존재하지 않는 하드웨어 클럭에 아무런 대체를하고 ntpdate를 서비스가 "ntpd가 -q"명령을 사용하기 때문에)

#server 127.127.1.0 
#fudge 127.127.1.0 stratum 14 

두가 서비스가 설치됩니다

/lib/systemd/system/ntpd.service :

[Unit] 
Description=Network Time Service 
After=network.target 

[Service] 
Type=forking 
PIDFile=/run/ntpd.pid 
ExecStart=/usr/bin/ntpd -p /run/ntpd.pid 
,

/lib/systemd/system/ntpdate.service : 네트워크 (= network.target 후)까지 후

[Unit] 
Description=Network Time Service (one-shot ntpdate mode) 
Before=ntpd.service 

[Service] 
Type=oneshot 
ExecStart=/usr/bin/ntpd -q -g -x 
RemainAfterExit=yes 

NTPD 시작되어, 날짜가 연속적으로 동기화되어야한다. 그러나 NTPD 맨 페이지에서 설명하고있다 :

대부분의 운영 체제와 오늘날의 하드웨어는 전원이 꺼져있을 때 기간 동안 시간을 ​​유지하기 위해 시간의 년 (TOY) 칩을 통합합니다. 컴퓨터가 부팅되면 칩을 사용하여 운영 체제 시간을 초기화합니다. 시스템에 NTP 서버에 동기화 된 이 있으면 운영 체제에서 칩을 수시로 수정합니다. 어떤 TOY 칩이 없거나 어떤 이유에서든 서버 시간에서 시간이 1000 초를 초과하면 ntpd는 이 끔찍하고 틀린 것으로 가정하고 운영자가 시계를 손으로 직접 설정하고 설정할 수 있습니다. 그러면 시스템 로그에 패닉 메시지와 함께 ntpd가 종료됩니다. -g 옵션은 이 검사를 무시하고 칩 시간에 관계없이 시계가 서버 시간으로 설정됩니다.그러나 깨진 하드웨어 (예 : )가 CMOS 배터리가 고장 나거나 클럭 카운터에 결함이있는 경우를 대비하여 시계가 설정되면 1000 초를 초과하면 오류가 발생하여 ntpd가 종료됩니다.

그래서 우리는 NTPD를 시작하기 전에 날짜를 설정해야하고이 ntpd.service을 시작하기 전에 "ntpd가 -q -g -x"실행하여 ntpdate를 서비스에 의해 수행된다. NTPD 사람 페이지에서

:

그냥 클럭이 설정되어 처음으로 후 ntpd가 종료 -q. 이 동작은 폐기 될 ntpdate 프로그램의 동작을 모방합니다. -g 및 -x 옵션을이 옵션과 함께 사용할 수 있습니다. 참고 :이 옵션을 사용하면 커널 시간 규율이 비활성화됩니다.


Beaglebone에 설치하는 또 다른 서비스가 날짜와 상호 작용

/시간

timestamp.service

[Unit] 
Description=Timestamping service 
ConditionPathExists=/etc/timestamp 
After=remount-rootfs.service 

[Service] 
RemainAfterExit=yes 
ExecStart=/usr/bin/load-timestamp.sh 
ExecStop=/usr/bin/load-timestamp.sh --save 

을/etc/타임 스탬프에서 현재 타임 스탬프가 멈췄이 서비스 저장소와 시작될 때의 타임 스탬프에서 날짜를 설정하십시오. 따라서 ntpd가 설치되어 있지 않으면 수동으로 날짜를 설정하고 비글 본을 다시 부팅하면 날짜가 부팅 시간보다 뒤쳐집니다.

+0

안녕하세요, 업데이트 해 주셔서 감사합니다. 그럼 조금 설명 할 수 있니? 얼마나 자주 업데이트됩니까? 인터넷을 사용할 수 있고 업데이트를 한 후 전원 공급시 항상 올바르게 작동합니까?/usr/bin/ntpdate -b -s -u pool.ntp.org를 실행하는 크론 작업이 여전히 필요합니까? – Eradicatore

+0

안녕 Eradicatore. 늦게 답변을 드려 죄송합니다. 첫 번째 답변을 올린 직후 Beaglebone을 파괴했으며 새 것으로 바뀌 었습니다. 더 많은 설명으로 답변을 업데이트했습니다. 더 이상 ntpdate로 cron 작업이 필요하지 않습니다.이 작업은 ntpd로 대체됩니다. ntpd는 계속 실행되며 네트워크가 가동되면 부팅 할 때마다 대기합니다. Beaglebone에는 배터리가있는 실시간 시계가 없으므로 ntpdate.service (ntpd -q에 의존하고 ntpdate에 의존하지 않음)가 필요합니다. – MathieuLescure

0

대상 시스템에 /etc/network/if-post-up.d/ 디렉토리가 있습니까? 그렇다면 해당 디렉토리의 스크립트는 네트워크가 시작될 때 실행되어야합니다. 그렇지 않다면 DHCP를 사용하고 있습니까? DHCP 클라이언트가 스크립트 실행을 지원할 수 있습니다.