Назад | Перейти на главную страницу

остановка / перезагрузка nginx в Windows не удалась из-за отказа в доступе

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

Пара вещей, которые стоит попробовать:

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

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

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

cd E:\apath\nginx\nginx.exe
nginx -s reload

Основываясь на ваших выводах, я предполагаю, что вы работаете с Windows. Я столкнулся с точно такой же проблемой. Я решил свою проблему, узнав, что Nginx управляется NSSM. Я установил Nginx через шоколадку, и он рассматривал NSSM как зависимость.

Запустите административную командную строку и выполните следующее.

nssm restart nginx