Это старый вопрос, но он высоко оценен в Google. Я почти не могу поверить в ответы с наибольшим количеством голосов, потому что запуск процесса node.js в сеансе экрана &
с nohup
флагом или даже с флагом - все они - просто обходные пути.
Специально решение screen / tmux, которое действительно следует рассматривать как любительское решение. Screen и Tmux предназначены не для поддержки процессов, а для мультиплексирования сеансов терминала. Это нормально, когда вы запускаете скрипт на своем сервере и хотите отключиться. Но для сервера node.js вы не хотите, чтобы ваш процесс был подключен к терминальной сессии. Это слишком хрупко. Чтобы все работало, вам нужно демонизировать процесс!
Есть много хороших инструментов для этого.
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
Одно большое преимущество, которое я вижу в пользу PM2, заключается в том, что он может генерировать сценарий запуска системы, чтобы процесс продолжался между перезапусками:
$ pm2 startup [platform]
Где platform
можно 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
Сценарии инициализации :
Я не буду вдаваться в подробности о том, как написать сценарий инициализации, потому что я не являюсь экспертом в этом вопросе, и этот ответ будет слишком длинным, но в основном это простые сценарии оболочки, запускаемые событиями ОС. Вы можете прочитать больше об этом здесь
Докер :
Просто запустите ваш сервер в Docker-контейнере с -d
опцией и, вуаля , у вас есть демонизированный сервер node.js!
Вот пример Dockerfile (из официального руководства 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" ]
Затем создайте свой образ и запустите свой контейнер:
$ docker build -t <your username>/node-web-app .
$ docker run -p 49160:8080 -d <your username>/node-web-app
Надеюсь, это поможет кому-нибудь приземлиться на этой странице. Всегда используйте подходящий инструмент для работы. Это избавит вас от многих головных болей и лишних часов!
exit
. Когда я просто закрываю окно Putty, это не удается.