restart nginx
Gena Makhomed
gmm на csdoc.com
Ср Авг 3 10:07:01 UTC 2011
On 03.08.2011 12:27, Алексей Масленников wrote:
> на системе CentOS release 5.3 (Final)
где Вы взяли такой древний и глючный инит-скрипт?
> Запускается раза с 5-го
т.е. нормально не работает service nginx start ?
> restart пишет что все ОК, но не работает .
или проблемы только с service nginx restart ?
что при этом пишется на stderr и в error.log ?
> make_dirs() {
> # make required directories
> user=`nginx -V 2>&1 | grep "configure arguments:" | sed
> 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
> options=`$nginx -V 2>&1 | grep 'configure arguments:'`
> for opt in $options; do
> if [ `echo $opt | grep '.*-temp-path'` ]; then
> value=`echo $opt | cut -d "=" -f 2`
> if [ ! -d "$value" ]; then
> # echo "creating" $value
> mkdir -p $value && chown -R $user $value
> fi
> fi
> done
> }
возможно имеет смысл эту функциональность перенести
внутрь /usr/sbin/nginx, чтобы он сам создавал каталоги.
потому что через shell-скрипт получается не очень красиво...
> stop() {
> echo -n $"Stopping $prog: "
> killproc $prog -QUIT
> retval=$?
> echo
> [ $retval -eq 0 ] && rm -f $lockfile
> return $retval
> }
причина глюков с restart - именно в этом,
старому экземпляру nginx посылают сигнал -QUIT
- это команда на "плавное завершение" и после
этого - сразу же запускают новый экземпляр.
если убрать -QUIT - то service nginx stop будет завершать
его работу гораздо быстрее, сразу обрывая все соединения.
> restart() {
> configtest || return $?
> stop
> sleep 1
> start
> }
sleep 1 - это не очень хороший workaround для вручную созданного
глюка, старый экземпляр nginx может и не успеть выйти за 1 секунду.
кроме того - нет никакого смысла использовать restart, когда
в nginx есть http://sysoev.ru/nginx/docs/control.html#upgrade
да и большинство изменений в конфигурации применяются
с помощью команды service nginx reload
> force_reload() {
> restart
> }
очень старый инит-скрипт, эти ошибки были исправлены
в нем еще несколько лет тому назад. по крайней мере,
в init-скрипте из EPEL этих ошибок уже давно нет.
> Как это отдебажить ? Спасибо.
см. в аттаче мой вариант инит-скрипта.
после изменения настроек лучше делать service nginx reload
а после обновления бинарника или чтобы на 100% быть уверенным,
что все изменения применились - service nginx force-reload
service nginx restart не имеет смысла вообще использовать.
разве что только в том случае когда nginx так зависнет,
что никак нельзя будет завершить, а только через kill -9
( но лучше будет причину этой ошибки найти и устранить )
там я еще сделал некоторую часть работы для того, чтобы
можно было запускать одновременно несколько независимых
экземпляров nginx на одном сервере, просто копируя
инит-скрипт, например, в nginx-frontend, nginx-static, и т.п.
меняя переменную pidfile и значение переменной instance -
но пока что полностью это сделать не удалось - в nginx
жестко вкомпилировано имя error.log файла и поэтому
разные экземпляры nginx будут писать ошибки в один
и тот же лог-файл, что не очень удобно и трудно
потом будет понять, что к чему относится.
на FreeBSD насколько я знаю, nginx "из коробки"
поддерживает такой режим работы, что можно запускать
несколько полностью независимых друг от друга экземпляров,
но на Linux - такую функциональность сейчас сделать нельзя,
не компилируя его много раз с различными параметрами configure.
--
Best regards,
Gena
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: nginx.init
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20110803/70b41552/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: nginx.logrotate
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20110803/70b41552/attachment-0001.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: nginx.sysconfig
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20110803/70b41552/attachment-0002.ksh>
Подробная информация о списке рассылки nginx-ru