Оценок пока нет Запуск приложения Node.js в фоновом режиме

Допустим, мы создали приложение Node.js и хотим, чтобы при выходе из консоли после запуска через npm start/node index.js через команду Ctrl + C или из ssh — клиента наше приложение продолжало выполняться, как нормальный сервер. Для этого есть несколько способов, чтобы это решить.

Запуск в фоновом режиме при помощи nohup

Традиционный подход заключается в том, чтобы запустить команду, используя nohup:

$ nohup node simple-server.js> output.log &

или

$ nohup npm start> output.log &

Эта строчка говорит о том, чтобы мы запустили приложение Node.js в фоновом режиме, а все логи записывались в файл output.log.

Использование модуля Forever

Цель Forever — постоянно поддерживать дочерний процесс (например, веб-сервер node.js) и автоматически перезапускать его при неожиданном выходе из него.

Установить данный модуль можно следующей командой:

$ [sudo] npm install forever

Самые простые команды для использования данного модуля — это четыре простые задачи командной строки: start, stop, stopall, list:

usage: forever [start | stop | stopall | list] [options] SCRIPT [script options]

options:
  start          start SCRIPT as a daemon
  stop           stop the daemon SCRIPT
  stopall        stop all running forever scripts
  list           list all running forever scripts

Чтобы использовать Forever, как долговременный процесс, нужно запустить процесс через команду «start». Имея эти задачи, запуск сценария nodejs с Forever прост:

$ forever start simple-server.js 
$ forever list 
  [0] simple-server.js [24597, 24596]

Первая команда запускает скрипт simple-server.js в фоновом режиме с помощью daemon.node и возвращает управление текущему процессу оболочки. Вторая команда перечисляет все процессы, выполняемые с Forever. Идентификаторами после имени сценария являются идентификаторы процесса целевого скрипта и демона, которые будут запущены всегда, пока работает сервер. Мы можем подтвердить это, просмотрев список процессов:

$ ps axl | grep node 
  501 24596 1 0 31 0 Ss ?? 0: 00.03 node / usr / local / bin / forever start simple-server.js 
  501 24597 24412 0 31 0 S ?? 0: 00.07 узел simple-server.js

Чтобы проиллюстрировать, что Forever автоматически перезапустит дочерний процесс, который, каким-либо образом был закрыт в процессе перезагрузки или ошибки. Для этого давайте принудительно убьем запущенный процесс и проверим перезапустит ли Forever его:

$ kill 24597 
$ forever list 
  [0] simple-server.js [24611, 24596]

Как вы видите, идентификатор процесса целевого скрипта «simple-server.js» изменился с 24597 до 24611, что указывает на то, что новый процесс был запущен Forever. Таким образом, наш целевой скрипт будет работать непрерывно, но как мы его остановим? Остановка процесса с Forever проста из командной строки. Нам просто нужно передать индекс этого процесса из списка «вечный список» на остановку:

$ forever stop 0 
Forever остановил процесс: 
  [0] simple-server.js [24611, 24596]

Существуют некоторые параметры по умолчанию и соглашения о конфигурации, о которых вам следует знать при использовании Forever:

  1. Forever отслеживает запущенные процессы в файлах * .fvr, которые помещаются в /tmp/forever/pids;
  2. Каждый процесс Forever будет генерировать уникальный файл журнала, помещенный в /tmp/forever/*.log;
  3. Если не указано иное, вывод дочернего процесса stdout и stderr будет записан в указанный выше файл журнала.

Подробнее об этих параметрах можно узнать из использования Forever и документации по Github .

Использование модуля PM2

Последняя стабильная версия PM2 устанавливается через NPM:

npm install pm2@latest -g

Самый простой способ запустить, демонзировать и контролировать ваше приложение — это использовать эту командную строку:

pm2 start app.js

Можно, также, декларировать управление несколькими приложениями, для этого нужно создать файл конфигурации со следующим содержимым:

apps:
  - script   : app.js
    instances: 4
    exec_mode: cluster
  - script : worker.js
    watch  : true
    env    :
      NODE_ENV: development
    env_production:
      NODE_ENV: production

И далее очень просто их запускаем:

pm2 start process.yml

Подробнее об объявлении приложения читайте здесь .

Перезапуск PM2 с процессами, которые вы выполняете при загрузке / перезагрузке сервера, имеет решающее значение. Чтобы решить эту проблему, просто запустите эту команду для создания активного сценария запуска:

pm2 startup

Дополнительно тут.

Вот некоторые команды, которые стоит знать:

# Fork mode
pm2 start app.js --name my-api # Name process

# Cluster mode
pm2 start app.js -i 0        # Will start maximum processes with LB depending on available CPUs
pm2 start app.js -i max      # Same as above, but deprecated.

# Listing

pm2 list               # Display all processes status
pm2 jlist              # Print process list in raw JSON
pm2 prettylist         # Print process list in beautified JSON

pm2 describe 0         # Display all informations about a specific process

pm2 monit              # Monitor all processes

# Logs

pm2 logs [--raw]       # Display all processes logs in streaming
pm2 flush              # Empty all log files
pm2 reloadLogs         # Reload all logs

# Actions

pm2 stop all           # Stop all processes
pm2 restart all        # Restart all processes

pm2 reload all         # Will 0s downtime reload (for NETWORKED apps)

pm2 stop 0             # Stop specific process id
pm2 restart 0          # Restart specific process id

pm2 delete 0           # Will remove process from pm2 list
pm2 delete all         # Will remove all processes from pm2 list

# Misc

pm2 reset <process>    # Reset meta data (restarted time...)
pm2 updatePM2          # Update in memory pm2
pm2 ping               # Ensure pm2 daemon has been launched
pm2 sendSignal SIGUSR2 my-app # Send system signal to script
pm2 start app.js --no-daemon
pm2 start app.js --no-vizion
pm2 start app.js --no-autorestart

 

Пожалуй, основные из вышеизложенного списка:

pm2 start app.js           # Start app.js

pm2 start app.js -- -a 23  # Pass arguments '-a 23' argument to app.js script

pm2 start app.js --name serverone # Start a process and name it as serverone
                                    # you can now stop the process by doing
                                    # pm2 stop serverone

pm2 start app.js --node-args="--debug=7001" # --node-args to pass options to node V8

pm2 start app.js -i 0             # Start maximum processes depending on available CPUs (cluster mode)

pm2 start app.js --log-date-format "YYYY-MM-DD HH:mm Z"    # Log will be prefixed with custom time format

pm2 start app.json                # Start processes with options declared in app.json
                                    # Go to chapter Multi process JSON declaration for more

pm2 start app.js -e err.log -o out.log  # Start and specify error and out log

 

Если используется фреймворк express, то команда запуска приложения в демон-режиме будет выглядеть так:

 pm2 start bin/www  -i 0 --name "appName"

или просто, без дополнительного мониторинга:

pm2 start bin/www

Базовые команды:

 Basic Examples:

    Start an app using all CPUs available + set a name :
    $ pm2 start app.js -i 0 --name "api"

    Restart the previous app launched, by name :
    $ pm2 restart api

    Stop the app :
    $ pm2 stop api

    Restart the app that is stopped :
    $ pm2 restart api

    Remove the app from the process list :
    $ pm2 delete api

    Kill daemon pm2 :
    $ pm2 kill

    Update pm2 :
    $ npm install pm2@latest -g ; pm2 update

    More examples in https://github.com/Unitech/pm2#usagefeatures

  Deployment help:

    $ pm2 deploy help

 

Пожалуйста, оцените материал

WebSofter

Web - технологии