it-swarm-pt.tech

executar o nginx como serviço do windows

Eu estou tentando executar nginx (proxy reverso) como um serviço do windows para que seja possível fazer proxy de uma solicitação mesmo quando um usuário não está conectado.

Eu procurei muito e encontrei winsw que deveria criar um serviço a partir de um arquivo .exe (como o nginx).

eu encontrei muitos tutoriais on-line dizendo para criar um arquivo xml da seguinte forma

<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 c:\nginx</startargument>
   <stopargument>-p c:\nginx -s stop</stopargument>
</service>

(Eu tenho nginx.exe em uma pasta chamada nginx em c: o os caminhos estão corretos).

Agora o problema é que o serviço é criado, mas eu não consigo fazer isso começar, toda vez que eu tento iniciá-lo um windows aparece dizendo

Error 1053: The service didn't respond to the start or control request in a timely fashion

Alguém sabe como posso corrigir isso ou uma maneira diferente de executar o nginx como um serviço de janela?

8
John Smith

Eu encontrei NSSM (o gerente de serviço não-sugando): um programa que faz exatamente o que eu quero e é muito mais fácil de configurar.

2
John Smith

Apenas tropeçou aqui e conseguiu fazer com que as coisas funcionassem com esta alternativa gratuita de código aberto: https://nssm.cc/

Basicamente é apenas uma GUI para ajudá-lo a criar um serviço. Etapas que usei:

  1. Faça o download do NGinx ( http://nginx.org/en/download.html ) e faça o download para C:\foobar\nginx
  2. Baixar nssm ( https://nssm.cc/ )
  3. Execute "nssm install nginx" na linha de comando
  4. Na NSSM, faça o seguinte:
  5. Na guia do aplicativo: definir o caminho para C:\foobar\nginx\nginx.exe, defina o diretório de inicialização como C:\foorbar\nginx
  6. Na guia I/O, digite "start nginx" na entrada lenta. Opcionalmente, configure C:\foobar\nginx\logs\service.out.log e C:\foobar\nginx\logs\service.err.log nos slots de saída e erro.
  7. Clique em "instalar serviço". Vá para serviços, inicie "nginx". Clique em http: // localhost: 80 e você deve obter o logon do nginx. Desligue o serviço, desative o cache do navegador e atualize, a tela deve falhar no carregamento. 

Você deve ser bom para ir a partir de então.

21
Dave

Eu encontrei outra solução diferente de NSSM . Isso é o Windows Service Wrapper e as seguintes são as instruções:

  1. Baixe a versão mais recente do Windows Service Wrapper via github .

    • A versão atual até o momento desta publicação é v2.1.2 (desde que os executáveis ​​v2.x para .NET2.0 e .NET4.0 estão disponíveis - outros somente sob demanda).
  2. Renomeie o winsw-xxxx.exe para algo como nginxservice.exe.

    • Este é o nome que será exibido para o processo que possui seu processo Nginx.
  3. Coloque um arquivo XML ao lado do exe com o mesmo nome base, por exemplo nginxservice.xml. O conteúdo deve ser como abaixo (verifique sua localização 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>

  • Você pode encontrar detalhes atualizados sobre a configuração na página config GitHub e um exemplo genérico mostrando todas as opções possíveis here .

    1. Execute o comando nginxservice.exe install.
      • Agora você terá um serviço Nginx nos seus Serviços! (Está configurado para iniciar automaticamente na inicialização; se você quiser iniciar seu servidor, inicie manualmente o serviço (net start Nginx).)

A resposta acima foi tirada de um post .

2
Sam G

Como dito em outras respostas, o NSSM é a melhor ferramenta para executar o Nginx como um serviço.
Se vocênão quiser usar nenhum software externo de terceiros, então poderá implementar qualquer um desses dois métodos. 

  • Agendador de Tarefas do Windows
  • Atalho de inicialização do Windows

Agendador de Tarefas do Windows 

  • Como mencionado em esta resposta prepare um arquivo start.bat.
  • Coloque este arquivo onde nginx.exe está presente.
  • Abra o agendador de tarefas do Windows e configure a tarefa conforme descrito em esta resposta para executá-la indefinidamente.
  • Não se esqueça de executar esta tarefa como o maior privilégio com a conta do sistema, mais detalhes podem ser encontrados aqui .
  • Faça a tarefa para iniciar diariamente em um determinado momento, através do arquivo bat ele verificará se o serviço já está em execução para evitar a criação de várias instâncias do nginx.exe.
  • Se, por algum motivo, o Nginx for desligado, dentro de 5 minutos ele será iniciado.

Atalho de inicialização do Windows 

  • Crie um atalho de nginx.exe e coloque-o na pasta de inicialização do Windows.

  • Siga esta resposta para encontrar o seu local de inicialização. 

  • O Nginx será executado automaticamente sempre que você efetuar login no sistema. 
  • Esse é o mais fácil. No entanto, ele depende do perfil do usuário, ou seja, se você estiver executando o Nginx em um servidor, ele será executado apenas para sua conta de usuário, quando você efetuar logoff dele será interrompido.
  • Isso é ideal para o ambiente de desenvolvimento.
1
Soumendra

Você precisará disso para o winsw

   <service>
        <id>nginx</id>
        <name>nginx</name>
        <description>nginx</description>
        <executable>c:\...\nginx.exe</executable>
        <logpath>...</logpath>
        <logmode>roll</logmode>
        <stopexecutable>c:\nginx\nginx-1.14.0\nginx.exe</stopexecutable>
        <stopargument>-s</stopargument>
        <stopargument>stop</stopargument>
    </service>

Você precisará de um <executable> supondo que esteja usando o nginx.conf, portanto, não precisa de argumentos iniciais e também de <stopexecutable> e <stopargument>s (para emlate nginx -s stop)

0
tmjee