Dies ist eine alte Frage, die aber bei Google weit oben steht. Ich kann fast nicht glauben, dass die am höchsten bewerteten Antworten, weil die Ausführung eines node.js-Prozesses innerhalb einer Bildschirm-Sitzung, mit der &
oder sogar mit dem nohup
Flagge - und zwar alle - sind nur Behelfslösungen.
Insbesondere die Screen/Tmux-Lösung, die eigentlich als eine Amateur Lösung. Screen und Tmux sind nicht dafür gedacht, Prozesse am Laufen zu halten, sondern für das Multiplexen von Terminalsitzungen. Das ist in Ordnung, wenn Sie ein Skript auf Ihrem Server laufen lassen und die Verbindung unterbrechen wollen. Aber für einen Node.js-Server wollen Sie nicht, dass Ihr Prozess mit einer Terminalsitzung verbunden ist. Das ist zu anfällig. 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
Einen großen Vorteil von PM2 sehe ich darin, dass es das Systemstartskript generieren kann, damit der Prozess zwischen den Neustarts bestehen bleibt:
$ pm2 startup [platform]
Wo platform
kann sein ubuntu|centos|redhat|gentoo|systemd|darwin|amazon
.
für immer.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 werde nicht ins Detail gehen, wie man ein Init-Skript schreibt, weil ich kein Experte auf diesem Gebiet bin und es zu lang für diese Antwort wäre, aber im Grunde sind es einfache Shell-Skripte, die durch Betriebssystemereignisse ausgelöst werden. Sie können mehr darüber lesen aquí
Docker :
Führen Sie Ihren Server einfach in einem Docker-Container mit -d
Option und, voilá haben Sie einen daemonisierten node.js-Server!
Hier ist ein Beispiel für eine Dockerdatei (aus node.js) offizieller Führer ):
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 starten Sie Ihren Container:
$ docker build -t <your username>/node-web-app .
$ docker run -p 49160:8080 -d <your username>/node-web-app
Ich hoffe, dies hilft jemandem, der auf dieser Seite landet. Verwenden Sie immer das richtige Werkzeug für die Arbeit. Das wird Ihnen eine Menge Kopfschmerzen und Überstunden ersparen!
8 Stimmen
In meinem Fall funktioniert nohup, wenn ich Terminal durch Eingabe von
exit
. Wenn ich nur das Putty-Fenster schließe, schlägt es fehl.