To stare pytanie, ale ma wysoką pozycję w Google. Prawie nie mogę uwierzyć w najwyżej głosowane odpowiedzi, ponieważ uruchomienie procesu node.js w sesji ekranowej, z flagą &
lub nawet z nohup
flagą - wszystkie - są tylko obejściami.
Zwłaszcza rozwiązanie screen / tmux, które naprawdę powinno być uważane za rozwiązanie amatorskie . Screen i Tmux nie są przeznaczone do utrzymywania procesów w działaniu, ale do multipleksowania sesji terminalowych. W porządku, gdy uruchamiasz skrypt na serwerze i chcesz się rozłączyć. Ale w przypadku serwera node.js nie chcesz, aby proces był dołączany do sesji terminala. To jest zbyt delikatne. Aby wszystko działało, musisz demonizować ten proces!
Istnieje wiele dobrych narzędzi do tego.
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
Jedną dużą zaletą, którą widzę na korzyść PM2, jest to, że może on wygenerować skrypt uruchamiania systemu, aby proces trwał między ponownymi uruchomieniami:
$ pm2 startup [platform]
Gdzie platform
może być 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
Skrypty inicjujące :
Nie wchodzę w szczegółowe informacje na temat pisania skryptu inicjującego, ponieważ nie jestem ekspertem w tym temacie i odpowiedź byłaby zbyt długa, ale w zasadzie są to proste skrypty powłoki uruchamiane przez zdarzenia systemu operacyjnego. Możesz przeczytać więcej na ten temat tutaj
Doker :
Po prostu uruchom swój serwer w kontenerze Docker z -d
opcją i, voilá , masz demonizowany serwer node.js!
Oto przykładowy plik Docker (z oficjalnego przewodnika node.js ):
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" ]
Następnie zbuduj obraz i uruchom kontener:
$ docker build -t <your username>/node-web-app .
$ docker run -p 49160:8080 -d <your username>/node-web-app
Mam nadzieję, że to pomoże komuś lądować na tej stronie. Zawsze używaj odpowiedniego narzędzia do pracy. Zaoszczędzi Ci wiele bólów głowy i ponad godziny!
exit
. Kiedy tylko zamykam okno Putty, to się nie udaje.