663 Stimmen

Wie kann ich eine node.js-Anwendung als Hintergrunddienst ausführen?

Da dieser Beitrag im Laufe der Jahre viel Aufmerksamkeit erregt hat, habe ich die besten Lösungen für jede Plattform am Ende dieses Beitrags aufgelistet.


Originalpfosten :

Ich möchte, dass mein Node.js-Server im Hintergrund läuft, d. h.: Wenn ich mein Terminal schließe, soll mein Server weiterlaufen. Ich habe dies gegoogelt und kam mit diesem Lehrgang Es funktioniert jedoch nicht wie vorgesehen. Statt dieses Daemon-Skript zu verwenden, dachte ich, ich benutze einfach die Ausgabeumleitung (die 2>&1 >> file Teil), aber auch dieser wird nicht beendet - ich erhalte eine leere Zeile in meinem Terminal, als ob es auf Ausgaben/Fehler wartet.

Ich habe auch versucht, den Prozess in den Hintergrund zu stellen, aber sobald ich mein Terminal schließe, wird der Prozess ebenfalls beendet.

Wie kann ich es also weiterlaufen lassen, wenn ich meinen lokalen Computer herunterfahre?


Top-Lösungen :

3 Stimmen

Ich glaube, er wollte sein lokales System abschalten.

67 Stimmen

Er meinte, dass das Beenden einer ssh-Sitzung die Aufgabe beendet

6 Stimmen

github.com/Unitech/pm2 ist ein sehr gepflegter und sehr stabiler Prozessmanager, probieren Sie ihn aus!

12voto

Donald Punkte 3851

Ich verwende Supervisor für die Entwicklung. Es funktioniert einfach. Wann immer Sie Änderungen an einer .js-Datei vornehmen, startet Supervisor Ihre App automatisch neu, wobei die Änderungen geladen werden.

Hier ist ein Link zu seiner Github-Seite

Installieren:

sudo npm install supervisor -g

Mit -e können Sie ganz einfach andere Erweiterungen überwachen lassen. Ein weiterer Befehl, den ich oft verwende, ist -i, um bestimmte Ordner zu ignorieren.

Sie können nohup und supervisor verwenden, um Ihre Node-Anwendung im Hintergrund laufen zu lassen, auch wenn Sie sich abmelden.

sudo nohup supervisor myapp.js &

1 Stimmen

Ich denke, in der Praxis ist Supervisor eine bessere Option als die meisten Daemon-Module, insbesondere in Verbindung mit einem Webhook zum Auschecken von Updates.

0 Stimmen

Ich unterstütze dies. Wenn Sie PHP-Dateien ändern, würden Sie dann den Apache- oder Nginx-Server neu starten? Sicherlich nicht. Warum sollte man sich dann die Mühe machen, den gesamten Node.js-Server neu zu starten, auch wenn man nur eine Zeile Code ändert? Auch wenn dies vielleicht nicht die beste Lösung ist, müssen Sie sich zumindest mit Supervisor keine Gedanken über den Neustart machen (der Neustart findet ja trotzdem statt).

7voto

Page2PagePro Punkte 158

Node.js als Hintergrunddienst in Windows XP

Einbau:

  1. WGET installieren http://gnuwin32.sourceforge.net/packages/wget.htm über die ausführbare Datei des Installationsprogramms

  2. GIT installieren http://code.google.com/p/msysgit/downloads/list über die ausführbare Datei des Installationsprogramms

  3. NSSM installieren http://nssm.cc/download/?page=download durch Kopieren von nnsm.exe in den Ordner %windir%/system32

  4. c erstellen: \node\helloworld.js

    // http://howtonode.org/hello-node
    var http = require('http');
    var server = http.createServer(function (request, response) {
        response.writeHead(200, {"Content-Type": "text/plain"});
        response.end("Hello World\n");
    });
    server.listen(8000);
    console.log("Server running at http://127.0.0.1:8000/");
  5. Öffnen Sie die Befehlskonsole und geben Sie Folgendes ein (setx nur, wenn Resource Kit installiert ist)

    C:\node> set path=%PATH%;%CD%
    C:\node> setx path "%PATH%"
    C:\node> set NODE_PATH="C:\Program Files\nodejs\node_modules"
    C:\node> git config --system http.sslcainfo /bin/curl-ca-bundle.crt    
    C:\node> git clone --recursive git://github.com/isaacs/npm.git    
    C:\node> cd npm    
    C:\node\npm> node cli.js install npm -gf   
    C:\node> cd ..    
    C:\node> nssm.exe install node-helloworld "C:\Program Files\nodejs\node.exe" c:\node\helloworld.js    
    C:\node> net start node-helloworld
  6. Ein raffiniertes Batch-Goodie ist die Erstellung von c: \node\ServiceMe.cmd

    @echo off
    nssm.exe install node-%~n1 "C:\Program Files\nodejs\node.exe" %~s1
    net start node-%~n1
    pause

Dienstleistungsverwaltung:

  • Die Dienste selbst sind nun über Start-> Ausführen-> services.msc oder über Start->Ausführen-> MSCONFIG-> Dienste (und aktivieren Sie 'Hide Alle Microsoft-Dienste ausblenden').
  • Das Skript stellt jedem Knoten, der über das Batch-Skript erstellt wird, das Wort 'node-'.
  • Sie sind ebenfalls in der Registrierung zu finden: " HKLM \SYSTEM\CurrentControlSet\Services\node -xxxx "

7voto

ArtHare Punkte 1708

Die akzeptierte Antwort ist wahrscheinlich die beste Antwort für die Produktion, aber für einen schnellen Hack, der Entwicklungsarbeit leistet, habe ich dies gefunden:

nodejs scriptname.js & funktionierte nicht, weil nodejs das & zu verschlingen schien, und so konnte ich das Terminal nicht weiter benutzen, ohne dass scriptname.js starb.

Aber ich habe nodejs scriptname.js in einer .sh-Datei, und nohup sh startscriptname.sh & gearbeitet.

Das ist sicherlich nicht produktiv, aber es löst das Problem "Ich muss mein Terminal weiter benutzen und möchte nicht 5 verschiedene Terminals starten".

6voto

Eman Jayme Punkte 210

Juni 2017 Update:
Lösung für Linux: (Red hat). Die vorherigen Kommentare funktionieren bei mir nicht. Dies funktioniert für mich auf Amazon Web Service - Red Hat 7. Hoffentlich funktioniert dies für jemanden da draußen.

A. Create the service file 
sudo vi /etc/systemd/system/myapp.service
[Unit]
Description=Your app
After=network.target

[Service]
ExecStart=/home/ec2-user/meantodos/start.sh
WorkingDirectory=/home/ec2-user/meantodos/

[Install]
WantedBy=multi-user.target

B. Create a shell file
/home/ec2-root/meantodos/start.sh
#!/bin/sh -
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080
npm start

then:
chmod +rx /home/ec2-root/meantodos/start.sh
(to make this file executable)

C. Execute the Following

sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl status myapp

(If there are no errors, execute below.  Autorun after server restarted.)
chkconfig myapp -add

0 Stimmen

Sehr interessant, ich bin nur neugierig auf iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080 was es tut. Können Sie mir bitte mehr Details geben. Ich bin mir nicht sicher, aber ich glaube, es leitet den Verkehr um von 80 a 8080 auf welchen Node Server hört, richtig?

5voto

Pedro Muniz Punkte 548

Wenn Sie Nodejs auf einem Linux-Server betreiben, ist dies meiner Meinung nach der beste Weg.

Erstellen Sie ein Dienstskript und kopieren Sie es nach /etc/init/nodejs.conf

Dienst starten: sudo service nodejs start

Dienst anhalten: sudo service nodejs stop

Service-Skript

description "DManager node.js server - Last Update: 2012-08-06"
author      "Pedro Muniz - pedro.muniz@geeklab.com.br"

env USER="nodejs" #you have to create this user 
env APPNAME="nodejs" #you can change the service name
env WORKDIR="/home/<project-home-dir>" #set your project home folder here
env COMMAND="/usr/bin/node <server name>" #app.js ?

# used to be: start on startup
# until we found some mounts weren't ready yet while booting:
start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

pre-start script
    sudo -u $USER echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/$APPNAME.log
end script

script
    # Not sure why $HOME is needed, but we found that it is:
    export HOME="<project-home-dir>"  #set your project home folder here
    export NODE_PATH="<project node_path>"

    #log file, grant permission to nodejs user
    exec start-stop-daemon --start --make-pidfile --pidfile /var/run/$APPNAME.pid --chuid $USER --chdir $WORKDIR --exec $COMMAND >> /var/log/$APPNAME.log 2>&1
end script

post-start script
   # Optionally put a script here that will notifiy you node has (re)started
   # /root/bin/hoptoad.sh "node.js has started!"
end script

pre-stop script
    sudo -u $USER echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/$APPNAME.log
end script

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X