Автор Тема: Синхронизация времени скриптом при запуске  (Прочитано 1052 раз)

Оффлайн NecroJoke

  • Давно тут
  • **
  • Сообщений: 455
    • Email
Добрый день!
Села батарейка в ноуте, теперь скидывает часы, разобрал - требует паяльника замена, пока не на родине, паяльника нет. Сейчас захожу в цус, и жму применить, часы чудесно синхронизируются, а мне бы при запуске или хотя бы команду в консоли, уж надоедает в цус лезть каждый раз. Спасибо.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Если у вас Линукс на UNIX System V init, то нет проблем:
https://forum.altlinux.org/index.php?topic=41022.msg325355#msg325355
Инит-скрипт будет запускаться и после etcnet и после NetworkManager. Для систем на sysvinit, доработок и переделок он не требует.

На системах с systemd от Леонида, насколько мне известно, rc.local уже разломан, поэтому команды засунуть туда не выйдет. Хотя могу ошибаться.
Чтобы этот скрипт запускался на системах с systemd, в него нужно добавить LSB хидер, указывающий что скрипт должен запускаться после сетевой подсистемы. LSB хидер по примеру инит-скрипта из пакета nm-sysvinit.
Ссылки на документацию LSB и подробности, в конце этого сообщения:
https://forum.altlinux.org/index.php?topic=32361.msg253079#msg253079
Обязательно описывать
Required-Start: $local_fs $network
Required-Stop: оставить пустым. При севшем элементе питания в этом нет смысла. Как и в самом выполнении скрипта на shutdown системы.
Сам LSB хидер nm-group выглядит так:
$ cat /etc/rc.d/init.d/nm-group
#!/bin/bash
#
# Adding the first user to the _nmconnect group
#

# chkconfig: 2345 10 92
# description:  Adding the first user to the _nmconnect group
#
### BEGIN INIT INFO
# Provides:       nm-group
# Required-Start:
# Required-Stop:
# Default-Start:  2 3 4 5
# Default-Stop:
# Description:    Adding the first user to the _nmconnect group
### END INIT INFO


# Source function library.
. /etc/rc.d/init.d/functions
и т.д.
Стало быть, нужно блок от BEGIN до END врезать в тот скрипт с соответствующими правками.
В принципе в Required-Start: можно добавить и $time, поскольку в ntpd здесь нет большого смысла.
Вам только нужно будет определиться в том скрипте:
- У вас время в RTC, в UTC или в localtime.

Или написать юнит для systemd. Но глядя правде в глаза, у меня большие сомнения, что кто-нибудь из пользователей systemd, включая и системных администраторов systemd, это сделает.
« Последнее редактирование: 04.03.2018 13:29:16 от Speccyfighter »

Оффлайн Антон Мидюков

  • alt linux team
  • ***
  • Сообщений: 5 183
  • antohami@
« Последнее редактирование: 04.03.2018 14:01:22 от sb »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
https://wiki.archlinux.org/index.php/Systemd-timesyncd_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)

Перед этим установить    systemd-timesyncd

:-) В принципе неплохая документация, и юнит хороший:
Цитировать
Systemd-timesyncd (Русский

There is currently no text in this page. You can search for this page title in other pages, or search the related logs, but you do not have permission to create this page.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Страница на русском протухла и нуждается в сопроводителе:
https://wiki.archlinux.org/index.php/Systemd-timesyncd_(Русский)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Антон, поправь линк:
У тебя закрывающая скобка не является частью линка.

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 991
Антон, поправь линк:
У тебя закрывающая скобка не является частью линка.
Исправлено.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Готовый инит-скрипт (и для систем на systemd):
(Скрипт настроен когда аппаратные часы BIOS в UTC. Если вам нужно RTC в localtime, раскомментируйте строку с hwclock и localtime, а другую закомментируйте)
#!/bin/bash
#
# chkconfig: 2345 40 10
# description:  system time synchronization service and Real Time Clock
#
### BEGIN INIT INFO
# Provides:       synctime
# Required-Start: $local_fs $network $named $time
# Required-Stop:
# Default-Start:  2 3 4 5
# Default-Stop:
# Description:    system time synchronization service and Real Time Clock
### END INIT INFO


# Source function library.
. /etc/rc.d/init.d/functions


start() {
    ntpdate pool.ntp.org &>/dev/null
#    hwclock -w --localtime
    hwclock -w --utc
}

stop() {
    echo
}


case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    *)
        echo $"Usage: $0 {start}"
        exit 1
esac
exit 0

Скрипт требует установки пакета ntpdate.

Исправлено и проверено через
# hwclock -w --utc
# reboot
# date
Вс мар  4 15:09:28 +03 2018

на системе с sysvinit при:
# /etc/rc.d/init.d/ntpd status
ntpd is stopped
« Последнее редактирование: 04.03.2018 16:02:11 от Speccyfighter »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 099
Ещё один вариант, отличный от предыдущих:

apt-get install ntpd
chkconfig ntpd on (по идее, с systemd тоже должно прокатить)

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
С openntpd точно прокатит, - он и под init и под systemd:
$ rpm -ql openntpd | grep -v share/
/etc/control.d/facilities/ntpd
/etc/ntpd.conf
/etc/rc.d/init.d/ntpd
/etc/sysconfig/ntpd
/lib/systemd/system/ntpd.service
/usr/sbin/ntpd

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 099
С openntpd точно прокатит, - он и под init и под systemd:
А у openntpd точно нет ограничений на максимальный сдвиг ? У ntpd это решается не так давно добавленной опцией --panicgate. Но, может, у openntpd это изначально не ограничивали...

Оффлайн NecroJoke

  • Давно тут
  • **
  • Сообщений: 455
    • Email
Спасибо гуру за советы! А как это делает Альтератор? Он же как то выставляет, когда я жму применить, может мне просто как то этот скрипт запускать.

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 8 099
А как это делает Альтератор?
В принципе, он может запускать ntpdate. Но тут проблема в том, что это не сработает, если нет сети. А ntpd, либо openntpd, будучи запущенными демонами, дождутся и сделают.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
С openntpd точно прокатит, - он и под init и под systemd:
А у openntpd точно нет ограничений на максимальный сдвиг ? У ntpd это решается не так давно добавленной опцией --panicgate. Но, может, у openntpd это изначально не ограничивали...

Исправляет разбежку во времени в 47 лет.
Принудительно проверил установив системные часы и RTC на 1971-01-01.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
А как это делает Альтератор?
В принципе, он может запускать ntpdate. Но тут проблема в том, что это не сработает, если нет сети. А ntpd, либо openntpd, будучи запущенными демонами, дождутся и сделают.

Для ntpdate это не страшно.
В ntpdate можно произвольно увеличить время таймаута:
# man ntpdate | sed -n '96,100p'
       -t timeout
              Specify the maximum time waiting for a server  response  as  the
              value  timeout, in seconds and fraction. The value is is rounded
              to a multiple of 0.2 seconds. The default is 1 second,  a  value
              suitable for polling across a LAN.

По-умолчанию, время ожидания ответа сервера, 1 секунда.