nginx зупинка / перезавантаження в Windows не вдалося для доступу відмовлено


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 зараз слід граціозно зупинити. Удачі.


де знайти цей xml? Контекст важливий!
Roel

0

Пара спробувати:

  1. Навіщо працювати в обліковому записі мережі NETWORK SERVICE? Спробуйте зі стандартними умовами для всіх служб, LocalSystem.

  2. Дотримуйтесь цього підручника, щоб спробувати іншу обгортку, AlwaysUp . Якщо це працює, то, можливо, ви зіткнулися з проблемою з Windows Service Wrapper.

Повідомте, будь ласка, що знайдете.


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.