Назад | Перейти на главную страницу

Как запустить приложение NodeJS в фоновом режиме, чтобы оно не заканчивалось при выходе из системы?

Я пытаюсь сохранить приложение на моем сервере ubuntu, чтобы у Google было время проверить его, но приложение продолжает отключаться, когда я выхожу из системы.

Я запускаю приложение Nodejs с supervisor для отслеживания изменений (через сценарий оболочки)

Я нашел такие команды, как nohup, но я действительно невежественен, когда дело доходит до запуска фоновых служб, кроме ввода простых команд, таких как service httpd start что, похоже, очень хорошо работает для Apache на CentOS!

Нужно ли мне создавать другого пользователя для запуска служб? У меня есть экземпляр Linode с Ubuntu 10.04

run.sh

cd myapp/src/main/node
supervisor -w "myapp/src/main/node,myapp2/src/main/node,./" run-apps.js

Причина его выхода заключается в том, что, когда вы выходите из системы и завершаете работу родительской оболочки, сценарий получает сигнал HUP и теряет возможность записи в STDOUT и STDERR.

У вас есть 4 варианта (в порядке «правильность» и «чистота»):

  1. Измените его так, чтобы он игнорировал сигнал HUP и записывался в файл.
  2. Запустите сценарий в screen сессия
  3. Запустите сценарий, используя nohup
  4. Создайте довольно сложный сценарий bash, который затем запускает сценарий disowns и закрывает связанные каналы STDOUT и STDERR.

Попробуй это:

nohup supervisor -w "myapp/src/main/node,myapp2/src/main/node,./" run-apps.js &

Некоторые другие способы:

Вот еще один способ обойтись без nohup: открестись.

Например.:

$ jobs
$ sleep 300 &
[1] 79844
$ jobs
[1]  + running    sleep 300
$ disown %1
$ jobs
$ pgrep sleep
79844

Объяснение:

  1. Использовать jobs чтобы показать фоновые задания, их нет
  2. Задний план sleep 300
  3. Использовать jobs очередной раз. PID для sleep 79844, работа №1
  4. Отклонить работу №1
  5. Использовать jobs очередной раз. Никаких фоновых заданий.
  6. Использовать pgrep найти любые процессы с именем sleep. Есть один, с PID 79844 (тот же PID)

Вы можете закрыть терминал и / или выйти из системы, не затрагивая отклоненное задание.

Это имеет то преимущество, что не оставляет nohup.out файл, но вы также теряете все, что написано в STDOUT.