Önyüklemede node.js sunucusunu otomatik başlat


87

Herhangi bir node.js uzmanı, makinem önyüklendiğinde bir sunucuyu otomatik olarak başlatmak için node JS'yi nasıl yapılandırabileceğimi söyleyebilir mi? Windows'tayım


5
stackoverflow.com/questions/20426652/… Bunun son sorduğunuzdan farkı nedir?
WiredPrairie

1) Son sorunuz Winblows için, yanıtlar platformlara bağlı olarak kökten farklı olacaktır; 2) Linux'ta ise, muhtemelen en kolay şey, dağıtımınızın süreç yöneticisini (sysvinit, upstart, systemd) kullanmak olacaktır
TC1

Maalesef Winblows'ta, bunu yansıtacak şekilde düzenlendi
Bachalo

2
O halde bu sorunun diğer sorunuzdan farkı nedir?
hekzasiyanür

1
Son sorunun tek cevabından memnun değildi, bu yüzden bir ödül ekleyerek tekrar sordu.
Nahn

Yanıtlar:


172

Bu, node.js'de yapılandırılacak bir şey değildir, bu tamamen işletim sistemi sorumluluğundadır (sizin durumunuzda Windows). Bunu başarmanın en güvenilir yolu bir Windows Hizmetidir.

Bir Windows hizmeti olarak bir düğüm komut dosyası yükleyen bu süper kolay modül var, buna düğüm pencereleri ( npm , github , dokümantasyon ) denir . Daha önce kullandım ve bir cazibe gibi çalıştım.

var Service = require('node-windows').Service;

// Create a new service object
var svc = new Service({
  name:'Hello World',
  description: 'The nodejs.org example web server.',
  script: 'C:\\path\\to\\helloworld.js'
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

svc.install();

ps

Bu şeyi o kadar kullanışlı buldum ki etrafına kullanımı daha kolay bir sarmalayıcı ( npm , github ) yaptım .

Kurmak:

npm install -g qckwinsvc

Hizmetinizin kurulumu:

> qckwinsvc
prompt: Service name: [name for your service]
prompt: Service description: [description for it]
prompt: Node script path: [path of your node script]
Service installed

Hizmetinizin kaldırılması:

> qckwinsvc --uninstall
prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled

Bir hata aldım ama işe yaradınpm install qckwinsvc -g
Adam Gerthel

1
"qckwinsvc" harika. Bahşiş için teşekkürler.
NLV

1
Hmm, uygulamamda istem olmadan nasıl hata ayıklayabilirim? Düğüm denetçisinin yardımcı olabileceğini biliyorum, ancak CMD ile hata ayıklama daha sezgisel görünüyor.
adi518

2
Hizmet olarak bir node express uygulamasını yüklemeyi denedim ve çalışıyor (çıktıyı * .out.log dosyasındaki console.log çağrılarından alıyorum), ancak sunucudan web tarayıcım aracılığıyla bir yanıt almaya çalıştığımda , 404'ü geri aldım.
sanderd17

1
Qckwinsvc ile hizmetimin kurulduğu ve başlatıldığı mesajları aldım, ancak services.msc kullanarak onları göremiyorum. Ayrıca hizmetim başlangıçta bir günlüğe yazıyor, ancak günlük oluşturulmadı.
Gerry

91

Linux, macOS veya Windows pm2 kullanıyorsanız arkadaşınızdır. Kümeleri çok iyi idare eden bir süreç yöneticisi.

Siz kurun:

npm install -g pm2

Örneğin 3 işlemden oluşan bir küme başlatın:

 pm2 start app.js -i 3

Ve pm2 yapmak onları açılışta başlatır:

 pm2 startup

Bir API'ye, hatta bir monitör arayüzüne sahiptir :

MUHTEŞEM

GitHub'a gidin ve talimatları okuyun . Kullanımı kolay ve çok kullanışlıdır. Sonsuza dek en iyi şey .


2
ne yazık ki Windows 8'de
Bachalo

3
Efendim, bu cevap daha fazla oyu hak ediyor. Teşekkürler. Ayrıca pm2 startupbu platform parametrelerinden birine ihtiyaç duyduğunu söylemek istiyorum : <ubuntu|centos|gentoo|systemd>yani:
sospedra

3
@Deerloper parametresi gerekli değildir. Resmi sayfalarından: $ pm2 startup # auto-detect platform $ pm2 startup [platform] # render startup-script for a specific platform, the [platform] could be one of: # ubuntu|centos|redhat|gentoo|systemd|darwin|amazon
vorg

1
Bu şaşırtıcı ve en iyi cevap olmayı hak ediyor ve daha fazla oyu hak ediyor. Bunun için teşekkürler!
ILikeTurtles

1
@baptx Systemd UX ile bir sorununuz yoksa, pm2'nin ana cazibesi daha taşınabilir olmasıdır: sistem dışı tabanlı dağıtımlar, macOS ve Windows.
durum

32

Yanılmıyorsam, uygulamanızı komut satırını ve dolayısıyla bir toplu iş dosyasını kullanarak başlatabilirsiniz. Bu durumda, Windows oturum açma ile başlatmak çok zor bir iş değildir.

Sadece aşağıdaki içeriğe sahip bir toplu iş dosyası oluşturursunuz:

node C:\myapp.js

ve .bat uzantısıyla kaydedin. Burada myapp.js, bu örnekte C: sürücüsünde bulunan uygulamanızdır (yolu belirtin).

Artık toplu iş dosyasını C: \ Users \% username% \ AppData \ Roaming \ Microsoft \ Windows \ Start Menu \ Programs \ Startup konumunda bulunan başlangıç ​​klasörünüze atabilirsiniz.

Günlük çalışma kutusunda% appdata% kullanarak açın ve> Dolaşım> Microsoft> Windows> Başlat Menüsü> Programlar> Başlangıç ​​öğesini bulun

Toplu iş dosyası oturum açma sırasında yürütülecek ve cmd'den düğüm uygulamanızı başlatacaktır.


2
Bu işe yarıyor, ama fakir adamın yolu bu. Alttaki cevap daha iyi. Servis olarak kurun.
MindJuice

7
@MindJuice Katılıyorum, ancak bu kolay bir çıkış yolu, bu yüzden bahsetmeye değer olduğunu düşündüm.
Chetan Bhasin

11
Uygulamamın hem Linux hem de Windows üzerinde çalışması gerekiyor, bu nedenle bu çözüm benim için daha iyi çalışıyor çünkü uygulamamda Windows'a özel bir paket gerektirmeme gerek yok. Bir çözümün basit olması onu kötü yapmaz.
Ryan Higgins

Aslında, yalnızca makinede oturum açarsanız çalışır. Ancak, ölçeklendirme / CI amaçları için (üretim ortamı) bu işe yaramaz.
João Bruno Abou Hatem de Liz

4

Bu, Windows Görev Zamanlayıcı ile manuel olarak kolayca yapılabilir.

  • İlk önce sonsuza kadar yükleyin .
  • Ardından, aşağıdakileri içeren bir toplu iş dosyası oluşturun:

    cd C:\path\to\project\root
    call C:\Users\Username\AppData\Roaming\npm\forever.cmd start server.js
    exit 0
    
  • Son olarak, oturum açtığınızda çalışan zamanlanmış bir görev oluşturun. Bu görev, toplu iş dosyasını çağırmalıdır.


3

Node.js uygulamanızı bir Windows hizmeti olarak kurmanızı ve ardından hizmeti başlangıçta çalışacak şekilde ayarlamanızı öneririm. Bu, Başlangıç ​​klasörüne toplu iş dosyaları eklemek veya kaldırmak yerine Windows Hizmetleri ek bileşenini kullanarak başlangıç ​​eylemini kontrol etmeyi biraz daha kolaylaştırmalıdır.

Stackoverflow'daki hizmetle ilgili başka bir soru, birkaç (görünüşte) gerçekten iyi seçenekler sağladı. Check out bir Windows Hizmeti olarak node.js nasıl yüklenir . düğüm pencereleri bana gerçekten umut verici görünüyor. Bir kenara, servis olarak çalışması gereken Java uygulamaları için benzer araçlar kullandım. Hayatımı çok daha kolaylaştırdı. Bu yardımcı olur umarım.





0

Yukarıda paylaşılan çözümlere göre bunu başarmanın birden fazla yolu olduğunu biliyorum. Hepsini denemedim, ancak bazı üçüncü taraf hizmetleri, tüm görevlerin arka planda çalıştırıldığı konusunda netlikten yoksun. Bunu, windows toplu iş dosyası olarak belirtilene benzer bir powershell betiği aracılığıyla başardım. Windows Görev Zamanlayıcı'yı kullanarak her dakika çalışacak şekilde planladım. Bu şimdiye kadar oldukça verimli ve şeffaf oldu. Burada sahip olduğum avantaj, yeniden başlatmadan önce süreci açıkça kontrol ediyor olmamdır. Bu, sunucudaki CPU için fazla yüke neden olmaz. Ayrıca dosyayı başlangıç ​​klasörlerine açıkça yerleştirmeniz gerekmez.

function CheckNodeService ()
{

$node = Get-Process node -ErrorAction SilentlyContinue

if($node)
{
    echo 'Node Running'
}
else
{
    echo 'Node not Running'
    Start-Process "C:\Program Files\nodejs\node.exe" -ArgumentList "app.js" -WorkingDirectory "E:\MyApplication"
    echo 'Node started'

}
}

CheckNodeService

-2

Doğrudan bu yanıttan kopyalandı :

Bunu otomatikleştirmek istediğiniz herhangi bir dilde bir komut dosyası yazabilir (nodejs kullanarak bile) ve ardından kullanıcının% appdata% \ Microsoft \ Windows \ Start Menu \ Programs \ Startup klasörüne bu komut dosyasına bir kısayol yükleyebilirsiniz.


4
Bu durumda, soruyu buraya kopyala / yapıştır yerine kopya olarak işaretleyin.
OlivierH
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.