Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: "service nginx restart" vs "service nginx reload"
On Mon, May 19, 2008 at 04:16:22AM +0300, Gena Makhomed wrote:
> Здравствуйте, All.
>
> =======================================================================
>
> один глюк неприятный заметил, практически во всех сборках nginx
> под linux - команда service nginx restart срабатывает через раз:
>
> restart() {
> configtest || return $?
> stop
> start
> }
>
> подозреваю, что причина здесь в том, что старый nginx еще не успел
> завершиться, а новый не сможет нормально стартануть пока не завершен
> старый. как workaround помогает вставить sleep 1|2|3 между stop и start.
> но мне этот вариант не очень нравится. или это единственное,
> что можно сделать в этой ситуации? такая ошибка проявляется
> в nginx из fedora/epel, ищу как лучше всего ее пофиксить.
Во время старта nginx пытается 5 раз при'bind'иться к listen-сокетам
с интервалом в полсекунды. Так что задержка в 2.5с уже есть.
А вообще, после stop нужно проверять наличие pid-файла.
> =======================================================================
>
> кстати, в каких случаях вместо "service nginx restart"
> можно использовать "service nginx reload" ?
>
> reload() {
> configtest || return $?
> echo -n $"Reloading $prog: "
> killproc $nginx -HUP
> RETVAL=$?
> echo
> }
>
> и в каких случаях обязательно нужно делать полный restart ?
>
> =======================================================================
>
> вот такой код в init-скрипте
>
> force_reload() {
> restart
> }
>
> говорит о том, что force_reload всегда идентично restart.
> если бы "service nginx restart" было бы всегда идентично
> "service nginx reload", то init-скрипт выглядел бы так:
Это неправильно. nginx умеет полноценный reload без прерывания
в обслуживании клиентов.
> restart() {
> reload
> }
>
> но если nginx вообще не запущен, то в теперешней реализации
> сервиса "service nginx restart" приведет к его запуску,
> а "service nginx reload" - нет. кроме того, обновление
> пакета nginx в fedora/epel реализовано через condrestart:
>
> %postun
> if [ $1 -ge 1 ]; then
> /sbin/service %{name} condrestart > /dev/null 2>&1 || :
> fi
>
> condrestart|try-restart)
> [ ! -f $lockfile ] || restart
> ;;
>
> =======================================================================
>
> --
> С уважением,
> Gena mailto:gmm@xxxxxxxxx
>
--
Игорь Сысоев
http://sysoev.ru
|