Node.js

Как запустить Node.js в фоне: PM2, nohup и systemd простыми словами

Когда вы запускаете Node.js-сервер командой node server.js, он работает в текущем терминале. Если закрыть терминал, процесс обычно завершится. Поэтому для сервера нужен фоновый запуск: приложение продолжает работать, а вы можете закрыть окно терминала или выйти из SSH

Для большинства начинающих самый удобный способ — PM2. Он запускает Node.js-приложение как процесс, показывает логи, умеет перезапускать сервер и проще, чем ручная настройка systemd

Короткий ответ

Установите PM2

npm install -g pm2

Запустите приложение

pm2 start server.js

Посмотрите список процессов

pm2 list

Откройте логи

pm2 logs

Если в списке есть ваш server.js, Node.js-приложение работает в фоне

Минимальный сервер для проверки

Создайте файл server.js

const http = require("http")

const server = http.createServer((request, response) => {
  response.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" })
  response.end("Node.js server works")
})

server.listen(3000, () => {
  console.log("Server started: http://localhost:3000")
})

Обычный запуск

node server.js

Фоновый запуск через PM2

pm2 start server.js --name node-demo

Теперь сервер можно проверить в браузере

http://localhost:3000

Как остановить фоновый процесс

Посмотрите процессы

pm2 list

Остановите по имени

pm2 stop node-demo

Запустите снова

pm2 restart node-demo

Удалите из списка PM2

pm2 delete node-demo

Эти команды важны: фоновый процесс нельзя просто “закрыть крестиком”, его нужно остановить явно

Когда подойдет nohup

nohup можно использовать для простой проверки на Linux или macOS

nohup node server.js > app.log 2>&1 &

Но для постоянного сервера это менее удобно. Нужно отдельно искать процесс, читать лог-файл, перезапускать приложение при падении. PM2 делает это понятнее

Когда нужен systemd

На настоящем Linux-сервере часто используют systemd. Это системный менеджер служб. Он хорош для продакшен-сценариев, но новичку сложнее: нужно создавать service-файл, указывать пользователя, рабочую папку, команду запуска и правила перезапуска

Если вы только учитесь или поднимаете небольшой проект, начните с PM2. Когда появится стабильный сервер и понятная инфраструктура, можно перейти к systemd

Как запустить npm-команду в фоне

Иногда проект запускается не через node server.js, а через команду из package.json

npm run start

PM2 можно запустить и так

pm2 start npm --name my-app -- run start

Если команда называется dev, для постоянного сервера это обычно плохой признак. dev часто запускает режим разработки, а для публикации нужен start или отдельная сборка

Мини-практика

Создайте server.js, запустите его через PM2, откройте http://localhost:3000, затем остановите процесс через pm2 stop

После этого измените текст ответа в server.js, выполните pm2 restart node-demo и проверьте страницу еще раз. Так вы увидите полный цикл: старт, логи, изменение, перезапуск

Частые ошибки

Ошибка первая: запустить node server.js, закрыть терминал и удивиться, что сервер остановился

Ошибка вторая: запустить несколько одинаковых процессов на одном порту. Если порт 3000 уже занят, второй сервер не стартует

Ошибка третья: не смотреть логи. При фоновом запуске ошибки не всегда видны на экране, поэтому используйте pm2 logs

Ошибка четвертая: запускать npm run dev как постоянный сервер. Режим разработки не всегда подходит для продакшена

Что почитать дальше по Node.js

Если нужен общий маршрут по теме, откройте рубрику Node.js. Для соседних задач пригодятся эти разборы:

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x