Starten Sie den Server von node.js beim Booten automatisch


86

Können mir Experten von node.js sagen, wie ich Node JS so konfigurieren kann, dass ein Server beim Start meines Computers automatisch gestartet wird? Ich bin unter Windows


5
stackoverflow.com/questions/20426652/… Wie unterscheidet sich das von dem letzten Mal, als Sie gefragt haben?
WiredPrairie

1) Ihre letzte Frage betrifft Winblows. Die Antworten sind je nach Plattform radikal unterschiedlich. 2) Unter Linux ist es wahrscheinlich am einfachsten, den Prozessmanager Ihrer Distribution (sysvinit, upstart, systemd) zu verwenden
TC1

Leider auf Winblows, bearbeitet, um dies widerzuspiegeln
Bachalo

2
Wie unterscheidet sich diese Frage dann von Ihrer anderen Frage?
Hexacyanid

1
Er war mit der einzigen Antwort auf die letzte Frage nicht zufrieden, also stellte er sie mit einem beigefügten Kopfgeld erneut.
Nahn

Antworten:


168

Dies muss in node.js überhaupt nicht konfiguriert werden. Dies liegt ausschließlich in der Verantwortung des Betriebssystems (in Ihrem Fall Windows). Der zuverlässigste Weg, dies zu erreichen, ist ein Windows-Dienst.

Es gibt dieses supereinfache Modul, das ein Knotenskript als Windows-Dienst installiert. Es heißt Node-Windows ( npm , github , Dokumentation ). Ich habe vorher benutzt und wie ein Zauber gearbeitet.

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

Ich fand das Ding so nützlich, dass ich einen noch einfacher zu verwendenden Wrapper darum herum baute ( npm , github ).

Installation:

npm install -g qckwinsvc

Installieren Ihres Dienstes:

> 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

Deinstallation Ihres Dienstes:

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

Ich habe einen Fehler bekommen, aber es hat funktioniert mitnpm install qckwinsvc -g
Adam Gerthel

1
"qckwinsvc" ist großartig. Danke für den Tipp.
NLV

Schlägt bei Gewinn 10 Pro fehl. Ereignisanzeige: "Der Dienst node-expjs-dev wurde unerwartet beendet."
adi518

1
Hmm, wie kann ich meine App ohne Aufforderung debuggen? Ich weiß, dass Node-Inspector vielleicht hilft, aber das Debuggen mit CMD scheint intuitiver zu sein.
adi518

2
Ich habe versucht, eine Node Express-App als Dienst zu installieren, und sie wird ausgeführt (ich erhalte die Ausgabe der Aufrufe von console.log in der Datei * .out.log), aber wenn ich versuche, über meinen Webbrowser eine Antwort vom Server zu erhalten Ich bekomme gerade einen 404 zurück.
Sanderd17

90

Wenn Sie Linux, MacOS oder Windows verwenden, ist pm2 Ihr Freund. Es ist ein Prozessmanager, der sehr gut mit Clustern umgeht.

Sie installieren es:

npm install -g pm2

Starten Sie einen Cluster mit beispielsweise 3 Prozessen:

 pm2 start app.js -i 3

Und machen pm2 startet sie beim Booten:

 pm2 startup

Es hat eine API, sogar eine Monitorschnittstelle :

GENIAL

Gehen Sie zu Github und lesen Sie die Anweisungen . Es ist einfach zu bedienen und sehr praktisch. Das Beste seit Ewigkeiten .


2
leider auf Windows 8
Bachalo

3
Sir, diese Antwort verdient mehr Gegenstimmen. Vielen Dank. Ich möchte auch sagen, dass pm2 startupeiner dieser Plattformparameter benötigt wird <ubuntu|centos|gentoo|systemd>:
sospedra

3
Der Parameter @Deerloper wird nicht benötigt. Von ihrer offiziellen Seite: $ 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
Das ist erstaunlich und verdient es, die beste Antwort zu sein und mehr Stimmen zu haben. Danke dafür!
ILikeTurtles

1
@baptx Wenn Sie mit systemd UX einverstanden sind, ist der Hauptanreiz von pm2, dass er portabler ist: nicht systemd-basierte Distributionen, macOS und Windows.
Durum

31

Wenn ich mich nicht irre, können Sie Ihre Anwendung über die Befehlszeile und damit auch über eine Batchdatei starten. In diesem Fall ist es keine sehr schwierige Aufgabe, es mit der Windows-Anmeldung zu starten.

Sie erstellen einfach eine Batchdatei mit folgendem Inhalt:

node C:\myapp.js

und speichern Sie es mit .bat-Erweiterung. Hier ist myapp.js Ihre App, die sich in diesem Beispiel in Laufwerk C: befindet (geben Sie den Pfad an).

Jetzt können Sie die Batchdatei einfach in Ihren Startordner werfen, der sich unter C: \ Benutzer \% Benutzername% \ AppData \ Roaming \ Microsoft \ Windows \ Startmenü \ Programme \ Start befindet

Öffnen Sie es einfach mit% appdata% im Feld run dailog und suchen Sie> Roaming> Microsoft> Windows> Startmenü> Programme> Start

Die Batchdatei wird zum Zeitpunkt der Anmeldung ausgeführt und startet Ihre Knotenanwendung von cmd.


2
Das funktioniert, aber es ist der Weg des armen Mannes. Die Antwort von Talles unten ist besser. Installieren Sie es als Dienst.
MindJuice

7
@MindJuice Ich stimme zu, obwohl es nur ein einfacher Ausweg ist, also dachte ich, dass es erwähnenswert ist.
Chetan Bhasin

11
Meine Anwendung muss sowohl unter Linux als auch unter Windows ausgeführt werden, damit diese Lösung für mich besser funktioniert, da ich kein Windows-spezifisches Paket in meiner App benötigen muss. Nur weil eine Lösung einfach ist, ist sie keine schlechte.
Ryan Higgins

Eigentlich funktioniert es nur, wenn Sie sich am Computer anmelden. Für Skalierungs- / CI-Zwecke (Produktionsumgebung) funktioniert dies jedoch nicht.
João Bruno Abou Hatem de Liz

4

Dies kann einfach manuell mit dem Windows Task Scheduler durchgeführt werden.

  • Installieren Sie zuerst für immer .
  • Erstellen Sie dann eine Batchdatei, die Folgendes enthält:

    cd C:\path\to\project\root
    call C:\Users\Username\AppData\Roaming\npm\forever.cmd start server.js
    exit 0
  • Zuletzt erstellen Sie eine geplante Aufgabe, die beim Anmelden ausgeführt wird. Diese Aufgabe sollte die Batchdatei aufrufen.


3

Ich würde empfehlen, Ihre node.js-App als Windows-Dienst zu installieren und den Dienst dann so einzustellen, dass er beim Start ausgeführt wird. Dies sollte es etwas einfacher machen, die Startaktion mithilfe des Windows Services-Snapins zu steuern, anstatt Batchdateien im Startordner hinzufügen oder entfernen zu müssen.

Eine weitere servicebezogene Frage in Stackoverflow bot einige (anscheinend) wirklich gute Optionen. Lesen Sie, wie Sie node.js als Windows-Dienst installieren . Node-Windows sieht für mich sehr vielversprechend aus. Nebenbei habe ich ähnliche Tools für Java-Apps verwendet, die als Dienste ausgeführt werden mussten. Es hat mein Leben viel einfacher gemacht. Hoffe das hilft.





0

Ich weiß, dass es mehrere Möglichkeiten gibt, dies gemäß den oben genannten Lösungen zu erreichen. Ich habe nicht alle ausprobiert, aber einigen Diensten von Drittanbietern fehlt die Klarheit darüber, welche Aufgaben im Hintergrund ausgeführt werden. Ich habe dies durch ein Powershell-Skript erreicht, das dem als Windows-Batch-Datei genannten ähnelt. Ich habe es mit Windows Tasks Scheduler so geplant, dass es jede Minute ausgeführt wird. Dies war bisher sehr effizient und transparent. Der Vorteil, den ich hier habe, ist, dass ich den Prozess explizit überprüfe, bevor ich ihn erneut starte. Dies würde der CPU auf dem Server nicht viel Overhead verursachen. Außerdem müssen Sie die Datei nicht explizit in den Startordnern ablegen.

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

Direkt aus dieser Antwort kopiert :

Sie können ein Skript in einer beliebigen Sprache schreiben, die Sie automatisieren möchten (auch mit nodejs), und dann einfach eine Verknüpfung zu diesem Skript im Ordner% appdata% \ Microsoft \ Windows \ Startmenü \ Programme \ Startup des Benutzers installieren


4
In diesem Fall kennzeichnen Sie die Frage hier als Duplikat anstatt als Antwort zum Kopieren / Einfügen.
OlivierH
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.