На сервере Debian я установил Node.js. Я понимаю, как запустить приложение из putty с помощью этой командной строки:
node /srv/www/MyUserAccount/server/server.js
и добраться до него по адресу 50.51.52.53:8080
(IP и порт).
Но как только я закрою шпаклевку, я больше не смогу добраться до адреса 50.51.52.53:8080
.
Как заставить приложение Node.js работать постоянно?
Как вы можете догадаться, я новичок в Linux и Node.js.
Ответы:
Хотя другие ответы решают проблему ОП, все они излишни и не объясняют, почему он или она испытывает эту проблему.
Ключ этой строки: «Я закрываю замазку, тогда я не могу добраться до адреса»
Когда вы вошли на удаленный хост в Putty, вы запустили процесс SSH linux, и все команды, введенные из этого сеанса SSH, будут выполнены как дочерние элементы указанного процесса.
Ваша проблема в том, что когда вы закрываете Putty, вы выходите из сеанса SSH, который убивает этот процесс и все активные дочерние процессы. Когда вы закрываете замазку, вы случайно убиваете свой сервер, потому что запускаете его на переднем плане . Чтобы избежать этого, запустите сервер в фоновом режиме , добавив & к вашей команде:
Проблема здесь заключается в недостатке знаний Linux, а не в вопросе об узле. Для получения дополнительной информации проверьте: http://linuxconfig.org/understanding-foreground-and-background-linux-processes
ОБНОВИТЬ:
Как уже упоминалось, сервер узла все еще может умереть при выходе из терминала. Обычная ошибка, с которой я столкнулся, заключается в том, что, хотя процесс узла выполняется в bg, он является stdout, а stderr по-прежнему направлен на терминал. Это означает, что если сервер узла записывает в console.log или console.error, он получит сообщение об ошибке сломанного канала и сбое. Этого можно избежать, отправив выходные данные вашего процесса:
Если проблема не устраняется, вам следует изучить такие вещи, как tmux или nohup , которые по-прежнему более надежны, чем решения для конкретных узлов, поскольку их можно использовать для запуска всех типов процессов (базы данных, службы ведения журналов, другие языки).
Распространенная ошибка, которая может привести к выходу сервера, состоит в том, что после запуска
nohup node your_path/server.js &
вы просто закрываете терминал Putty простым щелчком мыши.exit
Вместо этого вы должны использовать команду, тогда ваш сервер узлов будет запущен.источник
&
услуги, она все равно закрывается. (Только что протестирован на Debian Jesse)nohup node /srv/www/MyUserAccount/server/server.js &
nohup node myApp.js &
запустила приложение в bg, но оно умирает, когда термин был закрыт. Не уверен, почему, хотя.exit
команду для выхода из терминала.Вы можете установить навсегда используя npm следующим образом:
А затем запустите ваше приложение с:
Или как услуга:
Навсегда перезапускает ваше приложение, когда оно по какой-либо причине падает или останавливается. Для ограничения перезапусков до 5 вы можете использовать:
Чтобы вывести список всех запущенных процессов:
Запишите целое число в скобках и используйте его следующим образом, чтобы остановить процесс:
Перезапуск работающего процесса:
Если вы работаете с файлом приложения, вы можете использовать этот
-w
параметр для автоматического перезапуска при каждомserver.js
изменении файла:источник
forever start <file>
forever server.js
иforever start server.js
? Я знаю, что это говорит, что это «как услуга», но что это значит?forever server.js
, он запускает сервер. Если я нажмуCtrl
+C
, он остановит службу. Если я ввожу,forever start server.js
то он запускает службу, и даже если я нажимаюCtrl
+,C
он остается открытым. Затем вы можете выполнить другие указанные выше команды для остановки / просмотра списка. Это то, что я испытал по крайней мере.forever
Модуль (v0.15.3) уязвима для регулярного выражения атак отказа в обслуживании и не должны быть использованы: github.com/foreverjs/forever/issues/960Вы можете использовать PM2 , это менеджер производственных процессов для приложений Node.js со встроенным балансировщиком нагрузки.
Установить PM2
Запустить приложение
Если вы используете экспресс, то вы можете запустить свое приложение, как
Перечисление всех запущенных процессов:
Будет перечислен весь процесс. Затем вы можете остановить / перезапустить службу, используя идентификатор или имя приложения с помощью следующей команды.
Для отображения логов
источник
Я бы порекомендовал поискать что-то типа Forever, чтобы перезапустить Node в случае сбоя, и обработать это для вас.
источник
nohup
, узел будет выходить при выходе из сеанса ssh, если вы запустите его таким образом (если вы не используете что-то вроде screen to tmux).nohup
. Было бы здорово, если бы мы могли разрешить эту путаницу. Но я не знаю с чего начать.nohup
. Пример:nohup node app.js &
Если вы просто хотите всегда запускать приложение узла в терминале, просто используйте screen.
Установить на Ubuntu / Debian:
Использование:
ctrl + a
а потомctrl + d
уволитьЧтобы получить вернулся:
Один экран:
screen -r
Если их несколько, вы можете перечислить все экраны с помощью:
screen -ls
А потом:
screen -r pid_number
источник
Вы можете просто использовать это
Это будет держать приложение запущенным, и чтобы закрыть его, вам придется убить его.
Для этого вы можете установить
htop
и затем найти узел и затем убить егоисточник
exit
команды). Если пользователь просто закрывает окно, это может использовать сигнал, отличный отSIGHUP
завершения процесса, и, следовательно, узел в любом случае завершит работу.killall node
, который убьет все процессы узла, в моем случае только один.Forever - очень хороший модуль NodeJs, который делает именно это.
Установите
forever
, введя в командной строкеЗатем используйте следующую команду для запуска сценария node.js
Тебе хорошо идти. Дополнительно вы можете запустить
чтобы увидеть все запущенные скрипты. Вы можете завершить любой конкретный сценарий, набрав
где
[pid]
идентификатор процесса скрипта, который вы получите изlist
команды. Чтобы остановить все сценарии, вы можете набратьисточник
источник
Монтаж
Вы можете использовать вечно для запуска сценариев непрерывно
для остановки службы
источник
Вот новое решение, которое я использовал для своих личных проектов:
Поместите это в
/etc/init/node_app_daemon.conf
:Это также будет обрабатывать ваше приложение в случае сбоя. Он будет отказываться от попыток возродить ваше приложение, если оно завершится 3 или более раз менее чем за 15 секунд.
источник
Во время разработки я рекомендую использовать nodemon . Он перезапустит ваш сервер при каждом изменении файла. Как уже отмечали другие, Forever - это вариант, но в производстве все зависит от платформы, которую вы используете. Как правило, вы хотите использовать рекомендованный операционной системой способ обслуживания (например, http://www.freedesktop.org/wiki/Software/systemd/ ).
источник
nodemon
запускает команду grunt, если вы не укажете файл JS сервера, поэтому я использую это для запуска mongo и узла навсегда / одновременноЯ нашел навсегда, чтобы сделать работу прекрасно.
Предполагая, что у вас уже установлен npm, если нет, просто выполните
Тогда установите навсегда
Теперь вы можете запустить его так
https://codingweb.io/run-nodejs-application-background/
источник
Сначала установите pm2 глобально
тогда начни
источник
Другой способ - создать системный блок для вашего приложения. создайте файл «XXX.service» в папке «/ etc / systemd / system», аналогично следующему:
Преимущество заключается в том, что приложение будет работать как служба, оно автоматически перезапускается в случае сбоя.
Вы также можете использовать sytemctl для управления этим:
systemctl start XXX
запустить службу,systemctl stop XXX
остановить ее иsystemctl enable XXX
автоматически запустить приложение при загрузке системы.источник
Я надеюсь, что это поможет вам.
В командной строке установите навсегда:
Создайте файл примера:
Вы можете редактировать файл и получать результаты прямо в браузере.
Вы можете использовать filezilla или любой редактор для редактирования файла. Запустите эту команду для запуска файла:
источник
Нет необходимости устанавливать какой-либо другой пакет.
Запустите эту команду
server.js - это файл вашего сервера, или он может быть api.js
После этого нажмите « Выход », чтобы закрыть терминал.
источник
Я рекомендую использовать PM2, который является диспетчером процессов для приложений Node.js. PM2 предоставляет простой способ управления приложениями и их демонизации (запуск их в качестве службы).
обратитесь по этой ссылке - https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-centos-7
источник
пакет навсегда работал для меня, только одно, это зависит от deep-equal , поэтому, если у вас возникли проблемы с его установкой, например:
Пытаться:
вместо.
источник