Подтвердить что ты не робот

Добавить nginx.exe в качестве системного сервиса Windows (например, Apache)?

Я установил NGINX в качестве внешнего сервера для статического контента, и я использую Apache в качестве внутреннего сервера для других целей.

Дело в том, что я не могу найти логический ответ, который позволяет мне сделать nginx.exe системный сервис Windows (например, мой Apache).

Кто-нибудь может ответить на этот вопрос?

4b9b3361

Ответ 1

Как это сделать с помощью Windows Service Wrapper

(Примечание: на данный момент есть более простые альтернативы - см. Также решения, описанные здесь ниже, с использованием шоколадного менеджера пакетов suneg и использования NSSM напрямую от Адами)

  1. Загрузите последнюю версию Windows Service Wrapper через github или nuget.
    • Текущая версия на момент написания статьи v2.2.0
    • С версии 2.x исполняемые файлы для .NET2.0 и .NET4.0 доступны - другие только по требованию.
  2. Переименуйте winsw-*.exe nginxservice.exe во что-то вроде nginxservice.exe.
    • Это имя, которое будет отображаться для процесса, которому принадлежит ваш процесс nginx.
  3. Поместите файл XML рядом с исполняемым файлом с тем же базовым именем, например, nginxservice.xml. Содержание должно быть, как показано ниже (проверьте ваше местоположение 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>
    
  4. Запустите команду nginxservice.exe install от имени администратора.

Теперь у вас будет служба nginx в ваших Сервисах! (Он настроен на автоматический запуск при загрузке; если вы хотите запустить сервер, вы должны вручную запустить службу (net start nginx).)


Подробное описание правильной настройки nginx в качестве службы Windows: http://web.archive.org/web/20150819035021/http://misterdai.yougeezer.co.uk/posts/2009/10/16/nginx-windows- оказание услуг /

Дополнительная информация не указана в сообщении блога:

Вы можете найти последнюю версию Windows Service Wrapper также через этот репозиторий Maven: http://repo.jenkins-ci.org

Примеры для Maven + Gradle:

<dependency>
    <groupId>com.sun.winsw</groupId>
    <artifactId>winsw</artifactId>
    <version>2.2.0</version>
    <classifier>bin</classifier>
    <packaging>exe</packaging>
</dependency>

<repository>
    <id>jenkinsci</id>
    <name>jenkinsci-releases</name>
    <url>http://repo.jenkins-ci.org/releases</url>
</repository>

compile "com.sun.winsw:winsw:2.2.0"

repositories {
    mavenCentral()
    maven { url http://repo.jenkins-ci.org/releases }
}

Ответ 2

Загрузить форму NSSM http://nssm.cc/download. "Запустить% NSSM_HOME%\nssm.exe установить" Nginx ""

Выберите исполняемый файл Nginx в диалоговом окне NSSM, затем нажмите OK. Перейдите в раздел "Службы" и запустите новую созданную службу "Nginx".

Ответ 3

SC.EXE будет работать только для исполняемых файлов, которые уже поддерживают API-интерфейс Windows, и могут нормально реагировать, чтобы запускать и останавливать запросы из диспетчера управления службами (SCM). Другие обычные приложения, специально не написанные как служба, просто не запускаются (обычно с ошибкой 1053)...

Для этих exe вам нужна "обертка сервиса" - небольшая утилита, которая может принимать команды запуска/остановки из SCM и соответственно запускать/завершать ваше приложение. Microsoft предоставляет Srvany (которая является бесплатной, но очень простой), но есть несколько других бесплатных и коммерческих альтернатив.

Кстати, вы должны проверить это руководство, показывающее, как запустить Nginix в качестве службы, особенно на этапе 7, в котором обсуждается, как правильно остановить Nginix. Не каждая оболочка будет поддерживать эту функциональность (Srvany не делает)...

Ответ 4

Вы можете использовать start.bat и stop.bat, чтобы реализовать тот же эффект.

start.bat

@ECHO OFF
REM Start Nginx
tasklist /FI "IMAGENAME eq nginx.exe" 2>NUL | find /I /N "nginx.exe">NUL
IF NOT "%ERRORLEVEL%"=="0" (
   REM Nginx is NOT running, so start it
   c:
   cd \nginx
   start nginx.exe
   ECHO Nginx started.
) else (
   ECHO Nginx is already running.
)

stop.bat

@ECHO OFF
REM Stop Nginx
tasklist /FI "IMAGENAME eq nginx.exe" 2>NUL | find /I /N "nginx.exe">NUL
IF "%ERRORLEVEL%"=="0" (
   REM Nginx is currently running, so quit it
   c:
   cd \nginx
   nginx.exe -s quit
   ECHO Nginx quit issued.
) else (
   ECHO Nginx is not currently running.
)

Ответ 5

Самый простой способ, который я нашел, - использовать Chocolatey менеджер пакетов.

Как только Chocolatey установлен, вы откроете приглашение администратора и введите:

choco install nginx

Теперь у вас работает служба Windows с именем nginx.

Ответ 6

Официальный nginx wiki ссылается на winginx для этой цели. Он создает exe-installer в среде linux. Процесс выглядит следующим образом:

sudo apt-get install nsis make
wget https://github.com/InvGate/winginx/archive/master.zip
unzip master.zip
cd winginx-master/
make
ls -lh ./build/nginx-service.exe

Чтобы получить фактические версии, вы должны указать их в Makefile.

Ответ 7

Загрузите zip файл из здесь.

Извлеките nginx-service.exe из winginx\build и запустите его.

Ответ 8

Вместо того, чтобы превращать nginx в службу или использовать CMD для запуска процесса, который действительно не работает. Я обнаружил, что Powershell упрощает запуск nginx как отдельный процесс. Я объединил начало nginx с PHP. Ниже приведена script, названная "start-nginx.ps1"

$fcgiPort = "127.0.0.1:9000"
$PHPini = "c:\php\php.ini"

$ErrorActionPreference = "SilentlyContinue"

function restart { 
Push-Location /nginx
Stop-Process -Force -Name nginx 
Start-Process ./nginx.exe   -WindowStyle Hidden 

Stop-Process -Force -Name php-cgi
Start-Process  "c:\php\php-cgi.exe" -ArgumentList ("-b" + $fcgiPort  +  " -c "  +  $PHPini)   -WindowStyle Hidden 
Pop-Location
}

restart

Этот script может быть выполнен из любого каталога, но должен быть настроен для того, где находится ваша установка nginx.

Этот script включает молчащую попытку убить nginx и PHP перед запуском обоих.

Системы Windows должны распознавать файлы .ps1 как powershell, даже в командной строке CMD.

Я создал еще один небольшой script, чтобы убить запущенные процессы, который просто удаляет строки "start-process" из этого файла.

Для запуска при запуске я использовал команду win-R для перехода к оболочке каталога: startup

Размещение ярлыка для запуска script в этом каталоге, nginx начинается при загрузке!

Powershell также включает гораздо более сложную возможность планировать задачи, и можно запланировать запуск этого script при запуске. См. эту ссылку

Из статьи:

 >powershell

 $trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30
 Register-ScheduledJob -Trigger $trigger -FilePath $HOME/start-nginx.ps1 -Name startNginx

В сочетании, я думаю, этот подход позволит вам получить все, что вам нужно, от службы windows nginx и не требует каких-либо сторонних приложений.

Ответ 9

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

  • Планировщик заданий Windows
  • Ярлык запуска Windows

Планировщик заданий Windows

  • Как уже упоминалось в этом ответе, подготовьте один файл start.bat.
  • Поместите этот файл, где присутствует nginx.exe.
  • Откройте планировщик задач Windows и настройте задачу, как описано в этом ответе, чтобы выполнять ее неограниченное время.
  • Не забудьте запустить эту задачу как наивысшую привилегию с системной учетной записью, более подробную информацию можно найти здесь.
  • Сделайте задачу запускаться ежедневно в определенное время, через файл bat она проверит, запущена ли служба, чтобы избежать создания нескольких экземпляров nginx.exe.
  • Если по какой-либо причине Nginx отключается, через 5 минут он запустится.

Ярлык автозагрузки Windows

  • Создайте один ярлык nginx.exe и поместите его в папку автозагрузки Windows.

  • Следуйте этому ответу, чтобы найти место запуска.

  • Nginx будет запускаться автоматически при каждом входе в систему.
  • Этот самый простой. Однако это зависит от профиля пользователя, т.е. Если вы запускаете Nginx на сервере, он будет работать только для вашей учетной записи пользователя, когда вы выходите из системы, он останавливается.
  • Это идеально подходит для среды разработки.

Ответ 10

choco install nginx-service https://chocolatey.org/packages/nginx-service Этот пакет предоставляет оболочку службы Windows nssm, которая создает стандартную службу Windows с именем nginx для управления сервером.

Меня устраивает