location
Slawa Olhovchenkov
slw на zxy.spb.ru
Вт Июл 9 09:07:52 UTC 2019
On Tue, Jul 09, 2019 at 11:51:19AM +0300, Maxim Dounin wrote:
> Hello!
>
> On Mon, Jul 08, 2019 at 07:24:33PM +0300, Slawa Olhovchenkov wrote:
>
> > On Mon, Jul 08, 2019 at 07:11:59PM +0300, Maxim Dounin wrote:
> >
> > > > > > action тут разный. я на этом внимание не заострил, думал и так понятно
> > > > >
> > > > > Понятно. И также понятно, что даже при одном и том же action -
> > > > > приведённые команды делают разное, и результаты могут кардинально
> > > > > отличаться в том числе из-за этого. Именно поэтому я и указал на
> > > > > эту проблему как на одну из возможных причин наблюдаемого
> > > > > поведения. Дабы подобную проблему гарантированно исключить -
> > > > > лучше всего использовать одну и ту же форму команды.
> > > >
> > > > так не бывает же `nginx -s restart`, т.е. `nginx stop && nginx start`
> > >
> > > Зато бывает "service nginx reload" и "service nginx restart".
> > >
> > > (Ну и вообще, использовать "nginx -s ..." на юникс-системах -
> > > странно. Как минимум попадаем на двойной парсинг конфигурации,
> > > как максимум - на невозможность использовать эти команды, если
> > > PID-файл надо переложить в другое место.)
> >
> > набирать короче, давно заучил, а эти service вечно меняются...
>
> Форма "service <name> <action>" работает начиная с FreeBSD 7.3, и
> с момента появления не менялась.
есть еще линуксы в разных вариантах и они сбивают.
а у них еще и имя сервиса различается в зависимости от пакета.
ну и я с фрей работаю начиная с 2.0.5 :)
> > > > > - После чего был сделан reload - и привёл к той же ошибке "module
> > > > > ... is already loaded", что было проигнорировано. Так
> > > >
> > > > нет, он не нашел ndk_* символов.
> > > > после чего я добавил строку с загрузко ndk_http.
> > >
> > > Не нашёл символов - в процессе тестирования конфигурации с помощью
> > > "nginx -t" и/или при парсинге конфигурации в процессе запуска
> > > "nginx -s"?
> >
> > вот тут не помню.
> >
> > > Ожидаемо, так как у свежезапущенных экземпляров nginx'а нет
> > > загруженных модулей, и они получают то, что было на диске. И это
> > > одна из причин, почему reload не стоит предварять запуском "nginx -t",
> > > и не стоит использовать "nginx -s".
> >
> > ничего не понял.
>
> В рассматриваемом случае содержимое бинарных файлов на диске
> (nginx + модули) - поменялось. Более того, поменялось -
> несовместимо, для работы старых бинарных файлов требовалась одна
> конфигурация, для работы новых - другая.
>
> Когда такое происходит, использование "nginx -t" и "nginx -s
> <action>" совместно с перезагрузкой конфигурации на лету -
> невозможно. Проблема в том, что эти команды требуют конфигурацию,
> совместимую с новыми бинарными файлами, тогда как для перезагрузки
> конфигурации работающего nginx'а - нужна конфигурация, совместимая
> со старыми бинарными файлами.
>
> Проще всего - в такую ситуацию не попадать, и после обновления
> бинарных файлов (что самого nginx'а, что модулей) - сразу делать
> upgrade, синхронизируя бинарники на дисках, и в памяти. Но вообще
> говоря работа в несинхронизированном состоянии тоже возможна -
> просто надо пользоваться сигналами, а не пытаться использовать
> nginx с диска (который не совпадает с тем, что в памяти).
так, т.е. nginx -s reload не эквивалентно kill -HUP `cat /var/run/nginx.pid`?
и вторая комманда срабоатла бы по старому варианту конфига и не стала
бы ругаться на неопределенные символы?
Подробная информация о списке рассылки nginx-ru