Я запускаю nginx на Windows Server 2008 R2 (x64) в качестве службы Windows. Для этого я использую Windows Service Wrapper. (На самом деле я следовал этому руководству: http://mercurial.selenic.com/wiki/HgServeNginxWindows.)
Служба работает нормально. Однако сервер не обрабатывает сигналы (например, стоп / перезагрузка).
Это означает, что если я остановлю службу, nginx не остановится. (Я должен убить его.)
И когда я хочу перезагрузить конфигурацию из командной строки:
C:\Users\Administrator>E:\apath\nginx\nginx.exe -p E:\apath\nginx -c E:\apath\nginx.conf -s reload
Он выводит:
nginx: [error] OpenEvent("Global\ngx_reload_4268") failed (5: Access is denied)
Я запускаю команду от имени администратора, а служба работает под пользователем NETWORK SERVICE.
Есть подсказки или похожие проблемы?
Ты должен бежать reload
из той же учетной записи, что и служба. Например, если вы запустите свой nginx как SYSTEM, вы можете использовать psexec
инструмент:
PSEXEC -s c:\nginx\nginx.exe -p c:\nginx -s reload
Я запускаю свою службу nginx в ЛОКАЛЬНОЙ СИСТЕМЕ и использую следующую конфигурацию xml:
<service>
<id>nginx-service</id>
<name>nginx-service</name>
<description>nginx-service</description>
<executable>c:\nginx\nginx.exe</executable>
<logpath>c:\nginx\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-pc:\nginx</startargument>
<stopexecutable>c:\nginx\nginx.exe</stopexecutable>
<stopargument>-s</stopargument>
<stopargument>stop</stopargument>
</service>
Я использую Windows Service Wrapper 1.18, и эта конфигурация мне подходит. Теперь процессы Nginx должны быть корректно остановлены. Удачи.
Пара вещей, которые стоит попробовать:
Зачем запускать в учетной записи NETWORK SERVICE? Попробуйте использовать LocalSystem по умолчанию для всех служб.
Следуйте этому руководству, чтобы попробовать другую оболочку, AlwaysUp. Если это сработает, возможно, вы столкнулись с проблемой Windows Service Wrapper.
Сообщите, что вы нашли.
чтобы он работал у меня в Windows 10 с nginx 1.9.15, мне пришлось добавить
-p c:\nginx
в аргументах остановки
<service>
<id>nginx</id>
<name>nginx</name>
<description>nginx</description>
<executable>c:\nginx\nginx.exe</executable>
<logpath>c:\nginx\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-p</startargument>
<startargument>c:\nginx</startargument>
<stopexecutable>c:\nginx\nginx.exe</stopexecutable>
<stopargument>-p</stopargument>
<stopargument>c:\nginx</stopargument>
<stopargument>-s</stopargument>
<stopargument>stop</stopargument>
</service>
cmd
так как Администратор. cd
в папку, в которой находится nginx, а затем выполните команды:cmd (как администратор)
cd E:\apath\nginx\nginx.exe
nginx -s reload
Основываясь на ваших выводах, я предполагаю, что вы работаете с Windows. Я столкнулся с точно такой же проблемой. Я решил свою проблему, узнав, что Nginx управляется NSSM. Я установил Nginx через шоколадку, и он рассматривал NSSM как зависимость.
Запустите административную командную строку и выполните следующее.
nssm restart nginx