Назад | Перейти на главную страницу

FreeBSD: как синхронизировать системные часы с аппаратными часами в bash?

Я пишу сценарий, который синхронизирует системные часы с аппаратными часами (также известными как RTC или часы CMOS), предполагая, что нет Демон сетевого протокола времени (NTP) запущен.

Я работаю на виртуальной машине, и супервизор не позволяет гостю изменять аппаратные часы.

Итак, в Linux я могу использовать hwclock --hctosys для этого в Debian, например:

$ date
Thu May 18 00:48:57 UTC 2017
$ date 0401121621
Thu Apr  1 12:16:00 UTC 2021
$ hwclock --hctosys # this set my system clock to the hardware clock back again
$ date
Thu May 18 00:49:28 UTC 2017

Но как я могу сделать то же самое в FreeBSD, если в ней нет утилиты hwclock? Я пробовал использовать adjkerntz -a но это не сработало. Я использую FreeBSD версии 11.0-RELEASE-p9

Спасибо за вашу помощь

См. Ответ 1 (ниже?) Для получения общих советов.

Чтобы убедиться, что ntpd установит часы, его нужно запустить с ключом -g. Или, если вы делаете это вручную, "ntpd -g -n". Последний переключатель - убедиться, что он не разветвляется. Первый устанавливает время независимо. Просмотрите сообщения и выйдите с помощью ^ C. Если он не работает, попробуйте использовать его с двумя ключами -g.

Включите ntp, включив его в /etc/rc.conf. Если ntpd включен, должно быть что-то вроде следующего. ntpd_enable = "ДА" ntpd_flags = "- p /var/run/ntpd.pid -f /var/db/ntpd.drift -g -g"

Запустите службу командой service ntpd start

openntpd устанавливает время, когда он запускается, поэтому, похоже, ему не нужна опция -g.

Проверьте sysctl machdep.disable_rtc_set. Так должно быть 0, а аппаратные часы устанавливаются автоматически каждый раз settimeofday() называется. Тогда, если ntpd работает, вам не нужно устанавливать аппаратные часы с помощью отдельной команды, так как ntpd уже вызывает этот системный вызов.