URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 91207
[ Назад ]

Исходное сообщение
"Окончательное решение проблемы ntpd/dovecot"

Отправлено DeadLoco , 21-Мрт-11 15:59 
Как известно, dovecot (да и многие другие сервисы) весьма чувствительны к точному времени. В частности, если ntpd начинает переводить стрелки, dovecot тут же умирает с воплями 'time went backward'.

Главная проблема заключается в том, что при загрузке FreeBSD система rc-скриптов задает очередность запуска демонов, но не гарантирует, что к моменту запуска последующего демона предыдущий выйдет на штатный режим. В частности, ntpd честно запускается ранее, чем dovecot, но далеко не всегда успевает выставить время. Обычно, ко времени запуска довекота, он даже не успевает со всеми серверами из пула пообщаться. Как результат - переводить стрелки ntpd начинает тогда, когда dovecot уже вовсю работает. Итог понятен.

Поскольку проблема заключена не в ntpd или dovecot, а в rc-скриптах, решение сделано средствами rc-скриптов:

-------------------8<-----------------------------
#!/bin/sh
#
# PROVIDE: ntpwait
# REQUIRE: ntpd
# BEFORE:  LOGIN

# Place that file into /usr/local/etc/rc.d/ntpwait.sh
# Extension '.sh' is mandatory
# Add 'ntpwait_enable="YES"' to the /etc/rc.conf
# Add 'ntpwait_flags="120"' to set delay in seconds

. /etc/rc.subr

name="ntpwait"
rcvar=`set_rcvar`
command="/bin/sleep"
: ${ntpwait_flags="30"}

load_rc_config $name
run_rc_command "$1"
#
-------------------8<-----------------------------

Данный скрипт приостанавливает запуск прочих rc-скриптов сразу после запуска ntpd, чтобы дать ему время отчехлиться. Если дефолтных 30 сек вам покажется мало, можете флагами задать нужное время.
Еще раз обращаю внимание: файл скрипта должен иметь расширение .sh, хотя большинство скриптов, там лежащих, его не имеют. Так надо.


Содержание

Сообщения в этом обсуждении
"Окончательное решение проблемы ntpd/dovecot"
Отправлено sdog , 21-Мрт-11 16:22 
А если так - сначала запустить ntpdate, сделать начальную синхронизацию, а затем запускать сам ntpd? Вроде, так делается при запуске ntpd в шапке.

"Окончательное решение проблемы ntpd/dovecot"
Отправлено DeadLoco , 21-Мрт-11 16:30 
> А если так - сначала запустить ntpdate, сделать начальную синхронизацию, а затем
> запускать сам ntpd? Вроде, так делается при запуске ntpd в шапке.

В настоящее время ntpdate считается устаревшим, и взамен него предлагается запускать ntpd с флагом -g (или ntpd_sync_on_start="YES"). В любом случае не гарантируется, что точное время будет выставлено до запуска чувствительных ко времени софтов.

Собственно, до определенного момента я успешно пользовался ntpd_sync_on_start, пока мне в работу не попала машинка, у которой из-за дефекта кварца время биоса убегает вперед на 15-20 сек в сутки. При этом даже крупношаговый перевод стрелок в стиле ntpdate занимает у ntpd заметное время. Заметно большее, чем остается до запуска довекота.


"Окончательное решение проблемы ntpd/dovecot"
Отправлено artemrts , 21-Мрт-11 21:16 
>[оверквотинг удален]
> : ${ntpwait_flags="30"}
> load_rc_config $name
> run_rc_command "$1"
> #
> -------------------8<-----------------------------
> Данный скрипт приостанавливает запуск прочих rc-скриптов сразу после запуска ntpd, чтобы
> дать ему время отчехлиться. Если дефолтных 30 сек вам покажется мало,
> можете флагами задать нужное время.
> Еще раз обращаю внимание: файл скрипта должен иметь расширение .sh, хотя большинство
> скриптов, там лежащих, его не имеют. Так надо.

Спасибо. Ну это можно в рубрику "Советы" отправить.


"Окончательное решение проблемы ntpd/dovecot"
Отправлено groggy , 22-Мрт-11 06:17 
>>Так надо.

А почему так надо?


"Окончательное решение проблемы ntpd/dovecot"
Отправлено DeadLoco , 22-Мрт-11 11:02 
>>>Так надо.
> А почему так надо?

Потому что скрипты без расширения запускаются главным шеллом в бекграунде, а с расширением - внутри основного потока главного шелла.