Остановка / перезагрузка nginx на окнах не удалась, поскольку доступ запрещен

13

Я использую 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.

Есть намеки или похожие проблемы?

Тонна
источник
Трассировка ProcMon должна помочь определить проблему. Если вы могли бы загрузить приложение Process Monitor , запустить его, запустить трассировку, повторить шаги, которые вы сделали ранее (чтобы вы могли воспроизвести ошибку « Отказано в доступе» ), остановить трассировку, сохранить ее как файл PML ( все события ) и поделиться файлом с нами, мы могли бы предоставить решение.
Томас Дабасинскас

Ответы:

2

Вы должны работать reloadс той же учетной записи, что и служба. Например, если вы запускаете nginx как SYSTEM, вы можете использовать psexecинструмент:

PSEXEC -s c:\nginx\nginx.exe -p c:\nginx -s reload

Ярослав Сиваков
источник
1

Я запускаю свой 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 должны быть остановлены изящно сейчас. Удачи.

ssanchezz23
источник
где найти этот xml? Контекст важен!
Roel
0

Несколько вещей, чтобы попробовать:

  1. Зачем работать в учетной записи NETWORK SERVICE? Попробуйте по умолчанию для всех сервисов LocalSystem.

  2. Следуйте этому руководству, чтобы попробовать другую оболочку AlwaysUp . Если это работает, то вы можете столкнуться с проблемой с Windows Service Wrapper.

Пожалуйста, сообщите, что вы найдете.

CoreTech
источник
0

чтобы он работал на 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>
Стивен Колмейер
источник
0
  1. Открыть cmdкак администратор .
  2. Затем cdв папку, где находится nginx, а затем выполните команды:

CMD (как администратор)

cd E:\apath\nginx\nginx.exe
nginx -s reload
Кент Павар
источник