Soru Windows sistem hizmeti olarak (Apache gibi) nginx.exe ekle?


NGINX'i statik içerik için bir ön uç sunucu olarak kurdum ve Apache'yi başka bir şey için arka uç sunucusu olarak kullanıyorum.

Şey yapmamı sağlayan mantıklı bir cevap bulamıyorum. nginx.exe bir Windows sistem hizmeti (Apache'm gibi).

Herhangi bir cevap buna rastlıyor mu?


44
2018-04-08 07:34


Menşei


misterdai.wordpress.com/2009/10/16/nginx-windows-service - Burhan Khalid
Soru aittir SF - Shiplu Mokaddim


Cevaplar:


Nasıl yapılır Windows Hizmet Paketi

(Not: Şimdiye kadar umut verici alternatifler var - ayrıca aşağıdaki cevapta açıklanan NSSM çözümüne bakın itibaren Adamy.)

  1. Son sürümünü indirin Windows Hizmet Paketi üzerinden github veya Nuget.
    • Bu yazının şu anki hali v2.1.2
    • V2.x .NET2.0 ve .NET4.0 için yürütülebilir olduğundan, diğerleri yalnızca talep üzerine.
  2. Adını değiştirmek winsw-1.xx-bin.exe gibi bir şey nginxservice.exe.
    • Bu, nginx işleminizin sahibi olan süreç için gösterilecek addır.
  3. Exe'nin yanında, aynı taban adı olan bir XML dosyasını yerleştirin. nginxservice.xml. İçerikler aşağıdaki gibi olmalıdır (nginx konumunuzu doğrulayın).

    <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. Komutu çalıştır nginxservice.exe install.

Şimdi bir nginx Hizmetinizde Servis! (Önyükleme sırasında otomatik olarak başlatılacak şekilde ayarlanır; sunucunuzu başlatmak isterseniz, hizmeti el ile başlatmanız gerekir.net start nginx)).


Windows Service olarak nginx'in doğru şekilde ayarlanmasının ayrıntılı açıklaması: http://web.archive.org/web/20150819035021/http://misterdai.yougeezer.co.uk/posts/2009/10/16/nginx-windows-service/

Yukarıdaki blog gönderisinde bulunmayan ek bilgiler:

Windows Hizmet Paketi'nin en son sürümünü bu Maven Deposu aracılığıyla da bulabilirsiniz: http://repo.jenkins-ci.org

Örnek:

<dependency>
    <groupId>com.sun.winsw</groupId>
    <artifactId>winsw</artifactId>
    <version>2.1.2</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>

68
2017-12-14 08:56



Not, yeni görünüyor WinSW için repo ile daha yeni ikili dosyalar mevcut. - Phrogz
@Phrogz Güncelleme için teşekkürler. - Jörg
2 duruş argümanı koymak zorunda olduğunuzu unutmayın (1.18'de test edilmiştir): <stopargument> -s </ stopargument> <stopargument> stop </ stopargument> - c-toesca
Nginxservice.xml dosyasında, doğru karakteri yüklemek için boşluk karakterini -p'den kaldırmam gerekiyordu. <Startargument> -pc: \ nginx </ startargument>. 1.8.0 ve 1.9.5'te denendi - Gerard Sexton
Xml'yi güncelledim, çünkü nginx işlemleri durdurulamadı ve el ile öldürmek zorunda kaldım. taskkill /F /IM nginx.exe. Windows Service Wrapper günlükleri, stopexecutable xml yapılandırmasını kaçırdığımı söyledi. Bu yüzden durma argüman etiketlerini kaldırdım ve bunu şu şekilde değiştirdim:<stopexecutable>c:\nginx\nginx.exe</stopexecutable> <stopargument>-s</stopargument> <stopargument>stop</stopargument> - ssanchezz23


NSSM formunu indir http://nssm.cc/download . "% NSSM_HOME% \ nssm.exe dosyasını" Nginx "uygulamasını çalıştırın

NSSM iletişim kutusunda Nginx yürütülebilir dosyasını seçin, ardından Tamam. Servislere gidin ve yeni oluşturulan "Nginx" servisini başlatın.


40
2018-02-19 01:51



Winsw ile aynı şeyi yapmaya çalışmak için birkaç saat harcadım (çünkü biliyorsunuz, cevabın daha fazla değeri var, bu yüzden önce bunu denemelisiniz) ve başarısız olduktan sonra birkaç dakika içinde NSSM ile yaptı. Awesomely teşekkürler! - Marius B
Teşekkürler, bir dahaki sefere bunun yerine çözümünüzle deneyeceğim! Araç çok basit görünüyor ve harika bir ismi var ;-) - Jörg
Harika çözüm! Workink mükemmel! Teşekkürler! - Anton Mitsev
Bu çözümün dezavantajı nginx komut satırı komutlarıdır. nginx.exe -s reload artık çalışmayacak: yapılandırmayı değiştirirseniz, servisi yeniden başlatmanız gerekir. Geçici çözüm olarak, nginx'i Administrators grubundaki bir kullanıcı olarak çalıştırmanız gerektiğini okudunuz, böylece kullanıcılarınız, Yöneticiler grubunda da komutları çalıştırabilecektir. - firepol


SC.EXE, yalnızca Windows Hizmetleri API'sini zaten destekleyen ve Services Control Manager'dan (SCM) istekleri başlatmak ve durdurmak için uygun şekilde yanıt verebilecek yürütülebilirler için çalışacaktır. Bir hizmet olarak özel olarak yazılmayan diğer düzenli uygulamalar, sadece başlamaz (genellikle 1053 hatası ile).

Bu exe için, SCM'den başlatma / durdurma komutlarını kabul edebilen ve uygulamanızı buna göre çalıştırabilecek / sonlandırabilecek küçük bir yardımcı program olan "hizmet paketi" ye ihtiyacınız vardır. Microsoft sağlar srvany (ki bu ücretsiz ancak çok basit), ancak başka birçok ücretsiz ve ticari alternatifler var.

BTW, bunu kontrol etmelisin Nginix'i nasıl bir hizmet olarak çalıştırmayı gösteren kılavuzözellikle de Nginix'in nasıl durduracağını tartışan 7. adım. Her sarıcı bu işlevselliği desteklemez (Srvany yapmaz) ...


6
2017-10-18 21:53



SC.EXE will only work for executables that already support the Windows Services API Windows'un belirli sürümlerine ait olmadıkça, bu ifadenin doğru olduğuna inanmıyorum. Hizmet dışı ikili dosyaları çalıştırmak için sc.exe kullandım. Örnek için buraya bakın - transistor1


Kullanabilirsiniz Start.bat ve stop.bat Aynı etkiyi gerçekleştirmek için.

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.
)

4
2017-10-01 02:28





Bulduğum en kolay yolu chocolatey Paketleme yöneticisi.

Chocolatey kurulduktan sonra, bir yönetim istemi açın ve şunu yazın:

choco install nginx

Artık 'nginx' adlı bir Windows hizmetiniz var.


4
2018-01-25 09:04



Bu, bu yazı olarak nginx v1.6.2'yi yükleyecek - Jörg
Bunun eski olduğunu biliyorum, ama kullan choco install nginx yerine - Manatax
Şu anda Haziran 2017'de ve nginx'in chocolatey versiyonu hala 1.6.2'dir ve bu da 16 Eylül 2014'te piyasaya sürülmüştür. Üretimde kullanmıyorum (Debian daha da güncel!). Her neyse, benim packer provizyonumu, dev bilgisayarımdaki bir web sunucusu ile test etmenin hızlı bir yoluna ihtiyacım var, bu yüzden bunun için gideceğim! - domih
Bu Temmuz-2017 ve chocolatey nginx 1.12'yi yükleyecek. - Shubham Patel


Zip dosyasını indir İşte.

Ayıkla nginx-service.exe itibaren winginx\build ve koş.


1
2018-02-13 07:09





Resmi nginx wiki atıfta bulunur winginx bu amaç için. Linux ortamında exe-installer oluşturur. Süreci şöyle görünür:

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

Gerçek sürümleri almak için bunları belirtmelisiniz Makefile.


1
2018-02-02 11:04



FYI: Linux! = Windows. - A.Grandt
@ A.Grandt Windows için bir exe yükleyici yapan bir linux aracıdır. Sonra bu yükleyiciyi kopyalayın, windows sunucunuza kurun ve bir hizmet olarak çalışır. - user3132194


Nginx'i bir servise dönüştürmek yerine veya bir işlemi başlatmak için CMD'yi kullanmak yerine, gerçekten işe yaramıyor. Powershell'in nginx'i ayrık bir süreç olarak başlatmayı kolaylaştırdığını keşfettim. Nginx'i PHP ile birleştirdim. Aşağıda "start-nginx.ps1" isimli betik var

$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

Bu betik herhangi bir dizinden yürütülebilir, ancak nginx kurulumunuzun bulunduğu yer için özelleştirilmesi gerekir.

Bu betik, her ikisini de başlatmadan önce nginx ve PHP'yi öldürmek için sessiz bir girişimi içerir.

Windows sistemlerinin CMD isteminde bile ".ps1" dosyalarını powershell olarak algılaması gerekiyor.

Bu dosyadan "başlangıç ​​süreci" satırlarını kaldıran, çalışan işlemleri öldürmek için başka bir küçük betik oluşturdum.

Başlangıçta çalıştırmak için, dizin kabuğuna gitmek için win-R komutunu kullandım: başlangıç

Bu dizinde başlangıç ​​komut dosyasına bir kısayol yerleştirmek, nginx açılışta başlar!

Powershell ayrıca görevleri zamanlamak için çok daha karmaşık bir yetenek içerir ve bu betiğin başlangıçta çalışacak şekilde zamanlanması mümkündür. Bu Bağlantıya Bakın

Makale'den:

 >powershell

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

Kombine, bu yaklaşımın size bir nginx windows hizmetinden ihtiyacınız olan her şeyi aldığını ve herhangi bir üçüncü taraf uygulaması gerektirmediğini düşünüyorum.


0
2017-11-26 16:25





NSSM, Nginx'i bir hizmet olarak çalıştırmak için en iyi araçtır.
Eğer sen harici 3. taraf yazılım kullanmak istemiyorum sonra bu iki yöntemin herhangi birini uygulayabilirsiniz.

  • Windows Görev Zamanlayıcısı
  • Windows başlangıç ​​kısayolu

Windows Görev Zamanlayıcısı 

  • Belirtildiği gibi bu cevap Bir start.bat dosyası hazırlar.
  • Bu dosyayı nginx.exe dosyasının bulunduğu yere koyun.
  • Windows görev zamanlayıcısı'nı açın ve açıklandığı şekilde görevi ayarlayın. bu cevap süresiz çalıştırmak için.
  • Bu görevi, sistem hesabıyla en yüksek ayrıcalık olarak çalıştırmayı unutmayın, daha fazla ayrıntı bulunabilir İşte.
  • Görev, günlük olarak belirli bir zamanda, yarasa dosyası aracılığıyla yapılıyorsa, hizmetin zaten birden çok nginx.exe örneği oluşturulmasını önlemek için çalışıp çalışmadığını kontrol edecektir.
  • Bir sebepten dolayı Nginx kapanırsa, 5 dakika içinde başlayacaktır.

Windows Başlangıç ​​kısayolu 

  • Nginx.exe bir kısayol oluşturun ve Windows'un başlangıç ​​klasörüne koyun.

  • Takip et bu cevap başlangıç ​​konumunuzu bulmak için.

  • Nginx sisteme her giriş yaptığınızda otomatik olarak çalışacaktır.
  • Bu en kolay olanı. Ancak, kullanıcı profiline bağlıdır, yani bir sunucuda Nginx çalıştırıyorsanız, yalnızca oturum açtığınızda, kullanıcı hesabınız için çalışır.
  • Bu dev çevre için idealdir.

0
2018-02-03 08:59