Dies ist eine alte Frage, hat aber bei Google einen hohen Stellenwert. Ich kann fast nicht an die Antworten mit den höchsten Stimmen glauben, weil das Ausführen eines node.js-Prozesses innerhalb einer Bildschirmsitzung mit dem &
oder sogar mit demnohup
Flag - allesamt - nur Problemumgehungen sind.
Speziell die Screen / TMux-Lösung, die eigentlich als Amateur- Lösung gelten sollte. Screen und Tmux sind nicht dazu gedacht, Prozesse am Laufen zu halten, sondern zum Terminalen von Terminalsitzungen. Es ist in Ordnung, wenn Sie ein Skript auf Ihrem Server ausführen und die Verbindung trennen möchten. Bei einem node.js-Server möchten Sie jedoch nicht, dass Ihr Prozess an eine Terminalsitzung angehängt wird. Das ist zu zerbrechlich. Um die Dinge am Laufen zu halten, müssen Sie den Prozess dämonisieren!
Dafür gibt es viele gute Werkzeuge.
PM2 : http://pm2.keymetrics.io/
# basic usage
$ npm install pm2 -g
$ pm2 start server.js
# you can even define how many processes you want in cluster mode:
$ pm2 start server.js -i 4
# you can start various processes, with complex startup settings
# using an ecosystem.json file (with env variables, custom args, etc):
$ pm2 start ecosystem.json
Ein großer Vorteil, den ich für PM2 sehe, ist, dass es das Systemstart-Skript generieren kann, damit der Prozess zwischen Neustarts bestehen bleibt:
$ pm2 startup [platform]
Wo platform
kann sein ubuntu|centos|redhat|gentoo|systemd|darwin|amazon
.
forever.js : https://github.com/foreverjs/forever
# basic usage
$ npm install forever -g
$ forever start app.js
# you can run from a json configuration as well, for
# more complex environments or multi-apps
$ forever start development.json
Init-Skripte :
Ich gehe nicht ins Detail, wie man ein Init-Skript schreibt, da ich kein Experte in diesem Thema bin und es für diese Antwort zu lang wäre, aber im Grunde handelt es sich um einfache Shell-Skripte, die durch Betriebssystemereignisse ausgelöst werden. Mehr dazu lesen Sie hier
Docker :
Führen Sie Ihren Server einfach in einem Docker-Container mit der -d
Option und voilá aus , Sie haben einen daemonisierten node.js-Server!
Hier ist ein Beispiel für eine Docker-Datei (aus dem offiziellen Handbuch von node.j ):
FROM node:argon
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
Erstellen Sie dann Ihr Image und führen Sie Ihren Container aus:
$ docker build -t <your username>/node-web-app .
$ docker run -p 49160:8080 -d <your username>/node-web-app
Hoffe, das hilft jemandem, auf dieser Seite zu landen. Verwenden Sie immer das richtige Werkzeug für den Job. Es erspart Ihnen viele Kopfschmerzen und über Stunden!
exit
. Wenn ich gerade das Putty-Fenster schließe, schlägt es fehl.