2012-06-27 2 views
3

Я использую BeagleBone, и поскольку он не имеет встроенного RTC и аккумулятора, он теряет дату при каждой перезагрузке. Я могу легко установить дату с помощью команды:Каков наилучший способ запустить ntpdate при перезагрузке, только после того, как сеть готова

/USR/бен/Ntpdate -b -s -u pool.ntp.org

Но если власть выходит и обратно в дом для Например, время теряется. Решение, которое поставляется с последним дистрибутивом Linux Beaglebone Angstrom, заключается в том, чтобы установить линию crontab, которая обновляет время каждые полчаса. Но я бы предпочел просто запустить команду один раз при включении питания.

Я пытался положить эту команду, перечисленную выше в кронтабе с @reboot линии, но я считаю, забежав вперед сеть была настроена, или что-то еще не удалось, так как он не получил меня в нужное время, когда я вытащил власть в течение 5 минут и положил его обратно на beaglebone.

Есть ли способ использовать ifconfig или что-то в этом роде для запуска скрипта из init.d только после того, как сеть доступна?

ответ

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

Редактировать /etc/ntp.conf и прокомментировать следующие строки (не запасной вариант на качестве аппаратных часов, не существует, и потому, что Ntpdate служба использовать команду «пЪрд -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:

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

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

пЪрд запускается после того, как сеть работает (После = network.target), так что дата должна быть постоянно синхронизируется. НО объяснил в Ntpd человека странице:

Большинство операционных систем и аппаратных средств сегодня включают время-год (TOY) чип сохранить время, в течение периодов, когда питание выключено. Когда машина загружается, чип используется для для инициализации времени операционной системы. После того, как машина имеет , синхронизированную с сервером NTP, операционная система время от времени исправляет чип . В случае отсутствия чипа TOY или по какой-то причине его время составляет более 1000 с момента сервера, ntpd предполагает что-то должно быть ужасно неправильно, и единственным надежным действием для оператора является вмешательство и установка часов вручную. Это приводит к выводу ntpd в выход с сообщением о панике в системный журнал. Опция -g переопределяет эту проверку, и часы будут установлены на время сервера независимо от времени чипа.Тем не менее, и для защиты от неисправного оборудования, такого как , когда батарея КМОП выходит из строя или счетчик часов становится неисправным, после того, как часы установлены, ошибка, превышающая 1000, приведет к выходу ntpd.

Итак, нам нужно установить дату перед началом Ntpd, и это делается с помощью Ntpdate службы, выполнив «пЪрд -q -g -x» перед началом ntpd.service.

От Ntpd человек страницы:

-q Выход Ntpd только после того, как в первый раз часы установлены. Это поведение имитирует программу 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 

Этого магазин обслуживание текущая временной меткой в ​​/ и т.д./метке времени, когда он остановился и установите дату с этой отметки времени, когда она будет запущена. Поэтому, если ntpd не установлен, дата устанавливается вручную, а beaglebone перезагружается, дата отстает только от продолжительности загрузки.

+0

Привет, спасибо за обновление. Так вы можете это объяснить? Как часто это обновление? Теперь он работает всегда в режиме powerup после того, как интернет доступен и обновляется? Мне все еще нужно задание cron, которое запускает/usr/bin/ntpdate -b -s -u pool.ntp.org? – Eradicatore

+0

Hi Eradicatore. Извините за поздний ответ, я уничтожил своего Beaglebone сразу после публикации моего первого ответа, и я просто получил новый. Я уточнил ответ с дополнительными пояснениями. Вам больше не нужно задание cron с ntpdate, оно заменяется на ntpd, который запускается непрерывно и запускается при загрузке после завершения работы сети. Ntpdate.service (который полагается на ntpd -q, а не на ntpdate) необходим, потому что у Beaglebone нет часов реального времени с батареей. – MathieuLescure

0

У вас есть каталог /etc/network/if-post-up.d/ в вашей целевой системе? Если это так, скрипты в этом каталоге должны запускаться при появлении сети. Если нет, используете ли вы DHCP? Ваш DHCP-клиент может поддерживать запущенные скрипты.