Как сделать узел.JS приложение работает постоянно?


на сервере Debian, я установил узел.js. Я понимаю, как запустить приложение из putty с помощью этой командной строки:

node /srv/www/MyUserAccount/server/server.js

и добраться до него по адресу 50.51.52.53:8080 (IP и порт).

но как только я закрываю шпатлевку, то не могу дозвониться до адреса

15 178

15 ответов:

хотя другие ответы решают проблему ОП, они все излишни и не объясняют, почему он или она испытывает эту проблему.

ключ в этой строке, "я закрываю замазку, то я не могу добраться до адреса"

когда вы вошли в свой удаленный хост на Putty, вы запустили процесс SSH linux, и все команды, введенные из этого сеанса SSH, будут выполняться как дочерние элементы этого процесса.

ваша проблема в том, что когда вы закрываете шпатлевка, вы выход из сеанса SSH, который убивает этот процесс и любые активные дочерние процессы. Когда вы закрываете шпатлевку, вы случайно убиваете свой сервер, потому что вы запустили его в изображения. Чтобы избежать такого поведения запустите сервер в фон путем добавления и вашей команды:

node /srv/www/MyUserAccount/server/server.js &

проблема здесь заключается в отсутствии знаний linux, а не вопрос о узле. Для получения дополнительной информации проверьте: http://linuxconfig.org/understanding-foreground-and-background-linux-processes

обновление:

как уже упоминалось, сервер узла все еще может умереть при выходе из терминала. Общая проблема, с которой я столкнулся, заключается в том, что, хотя процесс узла работает в bg, он stdout, а stderr все еще указывает на терминал. Это означает, что если сервер узла записывает в консоль.журнал или консоль.ошибка он получит ошибку сломанной трубы и сбой. Этот можно избежать путем трубопроводы выход вашего процесса:

node /srv/www/MyUserAccount/server/server.js > stdout.txt 2> stderr.txt &

если проблема сохраняется, то вы должны смотреть в такие вещи, как tmux или команды nohup, которые по-прежнему более надежны, чем решения для конкретных узлов, поскольку они могут использоваться для запуска всех типов процессов (базы данных, службы ведения журналов, другие языки).

распространенной ошибкой, которая может привести к выходу сервера является то, что после запуска nohup node your_path/server.js & вы просто закрываете терминал замазки мимо простым нажатием кнопки. Вы должны использовать exit команда вместо этого, то ваш сервер узла будет запущен и работает.

вы можете установить навсегда С помощью npm такой:

sudo npm install -g forever

а затем запустите приложение с помощью:

forever server.js

или как сервиса:

forever start server.js

навсегда перезапускает приложение, когда оно падает или останавливается по какой-то причине. Чтобы ограничить перезапуск до 5 Вы можете использовать:

forever -m5 server.js

чтобы перечислить все запущенные процессы:

forever list

обратите внимание на целое число в скобках и используйте его следующим образом, чтобы остановить a процесс:

forever stop 0

перезапуск запущенного процесса идет:

forever restart 0

если вы работаете над файлом приложения, вы можете использовать -w параметр для автоматического перезапуска всякий раз, когда ваш server.js изменения файла:

forever -w server.js

можно использовать PM2, это менеджер производственного процесса для узла.приложения js со встроенным балансировщиком нагрузки.

установить PM2

$ npm install pm2 -g

запустить приложение

$ pm2 start app.js

если вы используете экспресс, то вы можете запустить свое приложение, как

pm2 start ./bin/www --name="app"

Список всех запущенных процессов:

$ pm2 list

он будет перечислять весь процесс. Затем вы можете остановить / перезапустить службу, используя идентификатор или имя приложения со следующим команда.

$ pm2 stop all                  
$ pm2 stop 0                    
$ pm2 restart all               

для отображения журналов

$ pm2 logs ['all'|app_name|app_id]

Я бы рекомендовал искать что-то типа навсегда чтобы перезапустить узел в случае сбоя и обработать демонизацию этого для вас.

если вы просто хотите запустить приложение узла в терминале всегда, просто используйте экран.

установить на ubuntu / debian:

sudo apt-get install screen

использование:

$ screen
$ node /path/to/app.js

ctrl + a а то ctrl + d уволить

чтобы получить обратно:

экран: screen -r

если есть более одного вы можете перечислить все экраны с: screen -ls

и затем: screen -r pid_number

вы могли бы просто использовать

nohup node /srv/www/MyUserAccount/server/server.js &

это будет держать приложение работает и закрыть его вам придется убить его.

для этого вы можете установить htop а затем искать узел, а затем убить его

здесь выскочка решение, которое я использую для своих личных проектов:

поместите его в /etc/init/node_app_daemon.conf:

description "Node.js Daemon"
author      "Adam Eberlin"

stop on shutdown

respawn
respawn limit 3 15

script
  export APP_HOME="/srv/www/MyUserAccount/server"
  cd $APP_HOME
  exec sudo -u user /usr/bin/node server.js
end script

Это также будет обрабатывать возрождение вашего приложения в случае его сбоя. Он откажется от попыток возродить ваше приложение, если оно выйдет из строя 3 или более раз менее чем за 15 секунд.

команды nohup работа я зарегистрировался AWS Ubunto vm следуйте правильному syntax

ubuntu@ip-172-00-00-00:~/ms$ nohup node server.js &

затем нажмите "Enter" вы увидите строку

ubuntu@ip-172-00-00-00:~/ms$ nohup: ignoring input and appending output to ‘nohup.out’

затем введите этот

rm nohup.out

enter image description here

навсегда это очень хороший модуль NodeJs, чтобы сделать именно это.

установить forever набрав в командной строке

$ npm install forever -g

затем используйте следующую команду для запуска узла.JS скрипт

$ forever start /path/to/script.js

вы хорошо идти. Кроме того, вы можете запустить

$ forever list

чтобы увидеть, все запущенные скрипты. Вы можете завершить любой конкретный скрипт, введя

$ forever stop [pid]

здесь [pid] - это идентификатор процесса из скрипта получить от . Чтобы остановить все скрипты, вы можете ввести

$ forever stopall

во время разработки, я рекомендую использовать nodemon. Он перезапустит ваш сервер при каждом изменении файла. Как указывали другие, навсегда вариант, но в производстве, все зависит от платформы, которую вы используете. Как правило, вы хотите использовать рекомендуемый операционной системой способ поддержания служб (например,http://www.freedesktop.org/wiki/Software/systemd/).

Я нашел навсегда, чтобы сделать работу отлично.

предполагая, что у вас уже установлен npm, если нет, просто сделайте

sudo apt-get install npm

затем установить навсегда

npm install forever --global

Теперь вы можете запустить его примерно так

forever start app.js

https://codingweb.io/run-nodejs-application-background/

установка

$ [sudo] npm install forever -g

вы можете использовать forever для непрерывного запуска скриптов

forever start server.js

forever list

для обслуживания

forever stop server.js

другой способ-это создание системного блока для вашего приложения. создайте файл" XXX.service "/etc/systemd/system" папка smilar для этого:

[Unit]
Description=swagger
After=network.target

[Service]
ExecStart=/usr/bin/http-server /home/swagger/swagger-editor &
WorkingDirectory=/home/swagger
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

преимущество в том, что приложение будет работать как сервис, он автоматически перезапускается, если он разбился.

вы также можете использовать sytemctl для управления им:

systemctl start XXX запустить службу, systemctl stop XXX на systemctl enable XXX для автоматического запуска приложения при загрузке системы.

Я рекомендую использовать PM2, который является менеджером процессов для узла.приложения на JS. PM2 обеспечивает простой способ управления и демонизации приложений (запуск их в качестве службы).

см. эту ссылку - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7

Я надеюсь, что это поможет вам.

в командной строке установите forever:

npm install forever -g

создайте файл, например:

sudo nano server.js 

вы можете редактировать файл и получать результаты непосредственно в вашем браузере.
Вы можете использовать filezilla или любой редактор для редактирования файла. Выполните эту команду, чтобы запустить файл:

forever start --minUptime 1 --spinSleepTime 1000 -w server.js

enter image description here