Це давнє запитання, але воно займає високі позиції в Google. Я майже не можу повірити у найвищі відповіді, оскільки запускається процес node.js всередині екранного сеансу, з &
або навіть ізnohup
прапором прапором - усі вони - лише обхідні шляхи.
Особливо рішення screen / tmux, яке справді слід вважати аматорським рішенням. Екран та 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
Сценарії Init :
Я не буду заглиблюватися в деталі про те, як написати сценарій init, тому що я не знавець у цій темі, і для цього відповідь було б занадто довго, але в основному це прості сценарії оболонки, викликані подіями ОС. Більше про це можна прочитати тут
Докер :
Просто запустіть ваш сервер у контейнері Docker з -d
опцією і, voilá , у вас є демонізований сервер 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, воно виходить з ладу.