Я подключаюсь к удаленному серверу через ssh. Затем я запустил приложение node.js с Forever. Все работает нормально, пока я не закрою окно консоли. Как запустить приложение node.js FOREVER на моем удаленном сервере, даже когда я закрываю свое соединение через ssh? Я просто хочу запустить приложение и закрыть свой компьютер. Мое приложение должно работать в фоновом режиме на моем удаленном сервере.
Как запустить приложение node.js навсегда, когда консоль закрыта?
Ответ 1
Вы также можете рассмотреть возможность использования утилиты upstart. Это позволит вам запускать, останавливать и перезапускать приложение node, как сервис. Upstart может настроить автоматическое перезапуск приложения, если он сработает.
Установить выскочку:
sudo apt-get install upstart
Создайте простой script для вашего приложения, который будет выглядеть примерно так:
#!upstart
description "my app"
start on started mountall
stop on shutdown
# Automatically Respawn:
respawn
respawn limit 99 5
env NODE_ENV=production
exec node /somepath/myapp/app.js >> /var/log/myapp.log 2>&1
Затем скопируйте файл script (myapp.conf) в /etc/init и убедитесь, что его отмечен как исполняемый файл. Затем ваше приложение может управляться с помощью следующих команд:
sudo start myapp
sudo stop myapp
sudo restart myapp
Ответ 2
Два ответа: один для Windows, один для * nix:
В Windows вы можете использовать команду start
, чтобы запустить процесс, отключенный от вашего экземпляра cmd.exe
:
start node example.js
В * nix есть два аспекта этого: Отключение процесса от консоли и обеспечение того, что он не получает сигнал HUP
( "зависание" ), которое большинство процессов (включая Node) ответит на завершение. Первый может быть необязательным, но последний необходим.
Запуск, отключенный от консоли, прост: обычно вы просто помещаете амперсанд (&
) в конце командной строки:
# Keep reading, don't just grab this and use it
node example.js &
Но выше не защищает процесс от сигналов HUP
. Программа может получать или не получать HUP
при закрытии оболочки (консоли) в зависимости от опции оболочки под названием huponexit
. Если huponexit
- true
, процесс получит HUP
, когда оболочка выйдет и предположительно завершится.
huponexit
по умолчанию используется false
для различных вариантов Linux, которые я использовал, и на самом деле я с радостью использовал вышеуказанные в течение многих лет до coderjoe и другие помогли мне понять (в очень длинном потоке комментариев под ответом, который, возможно, был удален), что я полагался на huponexit
false
.
Чтобы избежать возможности huponexit
true
в вашей среде, явно используйте nohup
. nohup
запускает процесс, защищенный от сигналов HUP
. Вы используете его следующим образом:
nohup node example.js > /dev/null &
или
nohup node example.js > your-desired-filename-or-stream-here &
Перенаправление важно; если вы этого не сделаете, вы получите файл nohup.out
, содержащий вывод из stdout
и stderr
. (По умолчанию nohup
перенаправляет stderr
в stdout
, а если stdout
выводится на терминал, он перенаправляет его на nohup.out
. nohup
также перенаправляет stdin
, если он принимает от терминала, поэтому нам не нужно это делать. Подробнее см. man nohup
или info coreutils 'nohup invocation'
.)
В общем, для этих целей вы хотите использовать монитор процесса, чтобы, если по какой-то причине произошел сбой процесса, монитор перезапустит его, но вышеописанное работает для простых случаев.
Ответ 3
Всегда, просто самое лучшее, не нужно выскочить, не нужно навсегда, просто nohup:
nohup node file.js &
Поверьте мне, я бегу так, что для моего дела!
Ответ 4
node expamle.js &
например
Ответ 5
В Linux, SSH на ваш удаленный сервер и запустите
screen
для запуска в новый экран.
Наконец, введите ctrl a d, чтобы отсоединить сеанс экрана, не убив процесс.
Подробнее здесь.
Ответ 6
Это лишь частичный ответ для Windows. Ive создал одну строку Visual Basic Script под названием app.vbs
, которая запустит ваше приложение node в скрытом окне:
CreateObject("Wscript.Shell").Run "node app.js", 0
Чтобы выполнить его автоматически при запуске, откройте каталог %AppData%\Microsoft\Windows\Start Menu\Programs\Startup\
и добавьте ярлык в файл app.vbs
.
Дополнительная информация: https://keestalkstech.com/2016/07/start-nodejs-app-windowless-windows/
Ответ 7
У меня была аналогичная проблема, и я думаю, что использование навсегда поможет справиться с разбивкой и перезапуском
Вы можете установить навсегда глобально:
sudo nom install -g forever
И запустите эту команду:
nohup forever server.js &
Это должно устранять все проблемы с закрытием терминала, закрытие сеанса ssh, node сбой и перезапуск.
Ответ 8
Если вы работаете с node.js в производственной среде, вам следует рассмотреть возможность использования PM2, forever.js или Nodemon.
В Интернете нет недостатка в сравнении разных пакетов.