Nginx не "умирает" корректно

Igor Sysoev is at rambler-co.ru
Mon Apr 27 19:16:27 MSD 2009


On Mon, Apr 27, 2009 at 05:39:59PM +0300, Gena Makhomed wrote:

> On Monday, April 27, 2009 at 13:54:09, Maxim Dounin wrote:
> 
> >> >    restart() {
> >> >        configtest || return $?
> >> >        stop
> >> >        start
> >> >    }
> 
> ...
> 
> MD> Кроме того, старый процесс после окончания завершения удалит 
> MD> pid-файл, и это скорее всего уже будет pid-файл нового процесса.
> 
> похоже что причина глюка в другом: новый nginx не будет запускаться
> командой "daemon $nginx -c $NGINX_CONF_FILE" если старый nginx не успел
> удалить свой pid-файл. [ функция daemon() из /etc/init.d/functions ]
> 
> этот init-скрипт для nginx используется в CentOS, EPEL, Fedora.
> хотелось бы сделать какое-то нормальное решение а не ugly hack.
> 
> будет ли нормальным решением проблемы добавить sleep 1 в функцию restart
> 
> restart() {
>     configtest || return $?
>     stop
>     sleep 1
>     start
> }
> 
> или можно придумать что-то лучшее? например, переименовывать
> старый pid-файл как можно скорее после получения сигнала
> из nginx.pid в nginx.pid.oldbin и потом не спеша удалять
> его в момент полного завершения работы старого мастера?

В смысле переименовывать самому nginx'у ?
По-моему, нужно лечить скрипты: у nginx'а сигналами всё нормально.
Для быстрого завершения есть -TERM.
Для загрузки новой конфигурации есть -HUP.
Зачем нужен restart, я не понимаю.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list