Как сделать узел.JS приложение работает постоянно?
на сервере Debian, я установил узел.js. Я понимаю, как запустить приложение из putty с помощью этой командной строки:
node /srv/www/MyUserAccount/server/server.js
и добраться до него по адресу 50.51.52.53:8080
(IP и порт).
но как только я закрываю шпатлевку, то не могу дозвониться до адреса
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 секунд.
навсегда это очень хороший модуль 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
установка
$ [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