Как запустить Node.js в качестве фонового процесса и никогда не умирать? - PullRequest
468 голосов
/ 25 января 2011

Я подключаюсь к серверу Linux через замазку SSH. Я пытался запустить его как фоновый процесс, как это:

$ node server.js &

Однако через 2,5 часа терминал становится неактивным и процесс умирает. Могу ли я в любом случае поддержать процесс, даже если терминал отключен?


Редактировать 1

На самом деле, я попытался nohup, но как только я закрываю терминал Putty SSH или отключаю интернет, серверный процесс сразу останавливается.

Что-нибудь, что я должен сделать в Замазке?


Изменить 2 (февраль 2012 г.)

Существует модуль node.js, навсегда . Он будет запускать сервер node.js в качестве службы демона.

Ответы [ 14 ]

3 голосов
/ 18 января 2018

Для Ubuntu я использую это:

(exec PROG_SH &> / dev / null &)

regards

3 голосов
/ 17 ноября 2017

Помимо классных решений, приведенных выше, я бы также упомянул инструменты контроля и мониторинга, которые позволяют запускать процесс, отслеживать его наличие и запускать, если он умер.С помощью 'monit' вы также можете запускать некоторые активные проверки, такие как проверка, отвечает ли процесс на запрос http

.
3 голосов
/ 05 июня 2017

Чтобы запустить команду как системную службу в Debian с sysv init:

Скопируйте скрипт-скелет и адаптируйте его под свои нужды, вероятно, все, что вам нужно сделать, это установить некоторые переменные. Ваш скрипт будет наследовать точные значения по умолчанию от /lib/init/init-d-script, если что-то не соответствует вашим потребностям - переопределите это в вашем скрипте. Если что-то пойдет не так, вы можете увидеть детали в источнике /lib/init/init-d-script. Обязательными переменными являются DAEMON и NAME. Скрипт будет использовать start-stop-daemon для запуска вашей команды, в START_ARGS вы можете определить дополнительные параметры start-stop-daemon для использования.

cp /etc/init.d/skeleton /etc/init.d/myservice
chmod +x /etc/init.d/myservice
nano /etc/init.d/myservice

/etc/init.d/myservice start
/etc/init.d/myservice stop

Вот как я запускаю некоторые вещи на Python для моей вики-конференции Викимедиа:

...
DESC="mediawiki articles converter"
DAEMON='/home/mss/pp/bin/nslave'
DAEMON_ARGS='--cachedir /home/mss/cache/'
NAME='nslave'
PIDFILE='/var/run/nslave.pid'
START_ARGS='--background --make-pidfile --remove-pidfile --chuid mss --chdir /home/mss/pp/bin'

export PATH="/home/mss/pp/bin:$PATH"

do_stop_cmd() {
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
        $STOP_ARGS \
        ${PIDFILE:+--pidfile ${PIDFILE}} --name $NAME
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    rm -f $PIDFILE
    return $RETVAL
}

Помимо установки vars мне пришлось переопределить do_stop_cmd, потому что python заменяет исполняемый файл, поэтому служба не остановилась должным образом.

0 голосов
/ 12 июня 2018

Попробуйте это для простого решения

cmd & exit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...