Как остановить node server ubuntu

Обновлено: 07.07.2024

Node-RED – это конфигуратор Интернета вещей (Internet of Things, IoT), графический инструмент, который поможет вам создать простую схему для объединения любимых приложений, веб-сайтов и аппаратного обеспечения. Node-RED часто сравнивают с IFTTT и поздним Yahoo Pipes, однако этот инструмент обладает большей производительностью, а также поддерживается широким открытым сообществом, которое разрабатывает ноды для взаимодействия с разнообразными приложениями и сервисами.

Данное руководство поможет:

  • установить Node.js и Node-RED,
  • получить SSL-сертификат от Let’s Encrypt,
  • настроить Nginx для обработки безопасных соединений Node-RED.

Требования

1: Установка Node.js и npm

Перед тем, как приступить к установке Node-RED, у вас должна быть установлена рабочая версия Node.js. Рекомендуем использовать Node.js LTS 8.x или 10.x. Пользователи Node.js 6.x должны убедиться, что у них установлены самые последние обновления. Node-RED больше не поддерживает Node.js 4.x и ранее.

Supported Ubuntu versions:

NodeSource will maintain Ubuntu distributions in active support by Canonical, including LTS and the intermediate releases.

Installation instructions

Node.js v13.x:

Node.js v12.x:

Node.js v10.x:

Ubuntu позволяет быстро установить LTS релиз Node.js из официального репозитория системы:

sudo apt-get install nodejs-legacy

Команда установит Node.js v4.2.x LTS (эта версия будет поддерживаться компанией Node.js Foundation в течение 30 месяцев с момента выхода 12 октября 2015 года).

Примечание: Обязательно нужно установить версию –legacy, как показано в команде, поскольку стартовые скрипты Node-RED требуют, чтобы бинарный файл Node.js назывался node, а не nodejs. В противном случае возникнет конфликт имён.

Убедитесь, что установка прошла успешно:

Команда вернёт номер версии Node.js:

Пакетный менеджер npm (Node Package Manager) позволяет устанавливать и управлять пакетами Node.js. С его помощью можно установить и Node-RED. Установите npm:

sudo apt-get install npm

Убедитесь, что установка прошла успешно, запросив версию npm:

Если команда вернула номер версии, а не ошибку, можно переходить к следующему этапу.

2: Установка Node-RED

Установите Node-RED и вспомогательную утилиту node-red-admin.

sudo npm install -g --unsafe-perm node-red node-red-admin

Менеджер npm обычно устанавливает пакеты в текущий каталог. В данной команде использован флаг –g (globally), который выполнит глобальную установку указанных пакетов и поместит их в стандартный каталог системы, например в /usr/local/bin. Флаг —unsafe-perm помогает избежать некоторых ошибок, которые могут возникнуть при попытке npm скомпилировать встроенные модули (написанные на компилируемых языках, например C или C ++).

Установка займёт некоторое время, после чего вы вернётесь в обычную командную строку. Пора протестировать установку.

Для начала откройте порт в брандмауэре.

По умолчанию Node-RED использует порт 1880.

sudo ufw allow 1880

Теперь попробуйте запустить Node-RED.

Примечание: Не забудьте заменить условный домен.

На экране появится интерфейс администратора Node-RED.

Если всё работает должным образом, нажмите CTRL+C, чтобы остановить Node-RED и вернуться в командную строку.

3: Настройка автозапуска Node-RED

Чтобы приложение Node-RED автоматически запускалось во время загрузки сервера, нужно создать файл node-red.service, поскольку Ubuntu 16.04 является первым LTS релизом, который использует систему инициализации systemd.

Откройте пустой service файл по имени node-red.service.

sudo nano /etc/systemd/system/node-red.service

Скопируйте и вставьте в него следующий код, внеся соответствующие коррективы.

Примечание: Подробнее о service-файлах рассказано в статье Основы Systemd: управление сервисами и журналирование.

Рассмотрим файл по частям.

Этот раздел описывает сервис и сообщает, что он должен быть запущен после syslog и network.

[Service]
ExecStart=/usr/local/bin/node-red-pi --max-old-space-size=128 -v
Restart=on-failure
KillSignal=SIGINT

Директива ExecStart содержит команду, с помощью которой запускается сервис. Она вызовет node-red-pi вместо node-red, что позволяет применить некоторые опции Node.js для экономии памяти. Такая команда запустит Node-RED на сервере любого разумного размера (возможность запуска зависит от количества потоков Node-RED). Restart=on-failure попробует перезапустить Node-RED в случае сбоя, а KillSignal подберёт лучший способ закрыть Node-RED, если станет необходимо выключить или перезапустить процесс.

Этот раздел создаёт метку для логирования и регистрирует все выходные данные.

Приложение Node-RED будет запущено с помощью не-root пользователя и его группы в домашнем каталоге.

Теперь нужно включить service-файл.

sudo systemctl enable node-red

Чтобы убедиться, что сервис работает, запустите его вручную:

sudo systemctl start node-red

Откройте Node-RED в браузере и убедитесь, что всё работает. Чтобы остановить сервис, введите:

sudo systemctl stop node-red

4: Настройка Nginx

Теперь нужно настроить Nginx для проксирования сервиса Node-RED. Это значит, что Nginx будет обрабатывать все соединения SSL на порте 443 (с помощью сертификата Let’s Encrypt) и передавать трафик приложению Node-RED.

Создайте новый конфигурационный файл Nginx:

Скопируйте и вставьте в него такой код:

server listen 80;
listen 443 ssl http2;
server_name node-red.example.com;
ssl_certificate /etc/letsencrypt/live/node-red.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/node-red.example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers On;
ssl_session_cache shared:SSL:128m;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
location / if ($scheme = http) return 301 https://$server_name$request_uri;
>
proxy_pass http://localhost:1880;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
>
location '/.well-known/acme-challenge' root /var/www/html;
>
>

Примечание: Откорректируйте конфигурацию, указав имя своего сервера и правильный путь к сертификату.

Сохраните и закройте файл.

Первые три строки указывают порты, которые будет слушать Nginx, и доменное имя, на которое он должен отвечать.

Строки ssl_certificate и ssl_certificate_key указывают пути к файлам сертификата и ключа Let’s Encrypt. Остальные строки ssl_ задают более безопасные протоколы, шифры и опции, чем предложенные по умолчанию.

Блок location / определяет параметры проксирования Node-RED.

Эта строка указывает на сервис Node-RED, который доступен на localhost и порте 1880. Остальные строки блока задают дополнительные заголовки, необходимые для корректного проксирования. Особенно важны заголовки Upgrade и Connection, они обрабатывают соединения сокетов Node-RED.

Последний раздел позволяет извлечь Let’s Encrypt из root-каталога Nginx.

location '/.well-known/acme-challenge' root /var/www/html;
>

Чтобы обновить настройки, перезапустите Nginx.

sudo systemctl reload nginx

Для проверки снова запустите Node-RED.

sudo systemctl start node-red

Снова откройте ссылку:

5: Защита Node-RED

Теперь нужно защитить доступ к интерфейсу Node-RED с помощью пароля. Хешируйте пароль, прежде чем добавлять его в конфигурационный файл.

Команда запросит пароль. Введите его, нажмите Enter, и на экране появится хеш пароля. Скопируйте его и добавьте в файл настроек Node-RED:

Найдите и раскомментируйте строку adminAuth (удалите // в начале строки). В строке username укажите имя администратора, а в строку password добавьте хеш пароля.

adminAuth: type: "credentials",
users: [username: "admin",
password: "$2a$08$Ab9prIr1M8a5a1/Zx8.B9.uIOCPe.v90ZGuZc2kAATp6BHJ/WV5KS",
permissions: "*"
>] >,

Также нужно раскомментировать строку uihost:

Теперь Node-RED будет прослушивать только локальный интерфейс, и никто не сможет получить доступ к приложению в интернете (только через прокси-сервер Nginx). Сохраните и закройте файл.

Снова обновите настройки брандмауэра:

sudo ufw deny 1880

sudo systemctl restart node-red

Перейдите по ссылке:

На экране появится форма входа.

Заключение

Теперь у вас есть надёжная установка Node-RED. Подробную информацию о приложении можно найти на сайте Node-RED.


В этой статье я собираюсь показать вам, как выполнить постепенное завершение работы в приложении NodeJS, но сначала давайте опишем, что означает «постепенное завершение работы» и почему мы должны делать это в нашем приложении и каковы его преимущества.

Изящное отключение

Представьте, что вам нужно выключить сервер, самый простой способ сделать это - + C, и сервер будет убит, но подождите, что если ваш сервер не завершил все запросы, что если некоторые клиентские соединения закрыты, потому что сервер убит и не может обрабатывать запросы.

-Это заставляет задуматься, верно?

Как вы можете догадаться, вам нужно обработать все запросы и закрыть все ресурсы, которые обрабатывают данные (например, соединения с базой данных), и не принимать никаких других запросов, и после этого вы можете спокойно отключить сервер.

Изящное отключение - это когда все ваши запросы к серверу отвечают, а обработки данных не осталось можно отключать сервер.

Очень важно создать корректное завершение работы и правильно завершить работу вашего сервера, потому что вы не можете знать, что может произойти с запросами, которые были сделаны к серверу, если вы немедленно выключили его, вы можете сделать ошибку и убить другой процесс (byPID), который предоставляется серверу NodeJS, или может произойти что-то другое, что может быть плохо для вашего приложения.

Как это работает

Вот четыре шага того, как вы можете сделать постепенное отключение простым способом.

  • Обрабатывать сигнал уничтожения процесса
  • Остановить новые запросы от клиента
  • Закрыть все процессы обработки данных
  • Выход из процесса

Прежде всего нам нужно обработать сервер, который кто-то хочет завершить, после этого нам нужно завершить все запросы и прекратить принимать новые запросы от пользователей на сервер, поэтому мы можем быть уверены, что нет никаких ожидающих запросов от пользователей на сервер перед выключением сервера, после этого нам нужно закрыть всю обработку данных (т.е. базы данных, некоторые воркеры файловой системы и т. д.), это зависит от того, что вы делаете на сервере, и, наконец, мы можем выйти из процесса.

Давайте создадим простой сервер NodeJS и выполним все шаги, которые я упомянул выше, которые будут корректно завершаться, когда мы хотим закрыть сервер и понять, как он работает.

Вот простой пример NodeJS Server с использованием ExpressJS

Здесь у нас есть простой сервер с маршрутом, который создает пользователя в MongoDB.

С помощью этой команды мы можем протестировать сервер и создать пользователя в базе данных.

Теперь давайте пройдемся по четырем шагам и напишем соответствующий код для этого.

1. Обработка сигнала уничтожения процесса

Сначала давайте разберемся, что такое сигнал процесса.

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

Сигнальные события будут генерироваться, когда процесс NodeJS получит сигнал.

Каждый сигнал имеет имя (например, «SIGINT», «SIGTERM» и т.д.), подробнее об этом в NodeJS здесь.

'SIGINT' генерируется с помощью + C в терминале. Сигнал 'SIGTERM' является общим сигналом, используемым для завершения программы. В отличие от 'SIGKILL' этот сигнал может быть заблокирован, обработан и проигнорирован. Это нормальный способ вежливо попросить программу завершиться. Команда оболочки kill генерирует 'SIGTERM' по умолчанию.

Вы можете прочитать больше о сигналах завершения здесь.

Как вы думаете, нам нужно добавить обработчик, который будет получать сигнал «SIGTERM».

Вот следующий пример, построенный на предыдущем примере, который обрабатывает сигнал.

Теперь давайте попробуем и проверим это.

Запустите сервер, после этого вам нужно получить номер PID, вы получите его с помощью команды ps, так что теперь у вас есть номер, и вы можете попытаться убить сервер, используя эту команду kill [PID_number] или просто killall node , который отправит сигнал на все серверы node&

SIGTERM сигнал получен.

Если вы попытаетесь снова, вы получите тот же лог

SIGTERM сигнал получен.

-Хммм, почему процесс не был убит?

Потому что вы обработали сигнал и проигнорировали его.

Итак, первый шаг сделан, давайте перейдем к следующему шагу.

2. Остановка новых запросов от клиента

Это можно сделать с помощью функции server.close, чтобы получить больше информации можете посетить страницу документации NodeJS.

Наш код будет выглядеть так

Он прекратит прием новых подключений к серверу, и если вы попытаетесь вызвать сервер, ваш запрос не будет выполнен.

3. Закрытие всех текущих процессов

В этом примере смысл заключается в том, чтобы закрыть соединение MongoDB, поскольку к базе данных не осталось запросов.

Так что это можно сделать с помощью этого кода

-Хммммм, почему Node сервер выходит после закрытия соединения с БД.

Это очень интересный вопрос, вы можете попытаться понять этот вопрос самостоятельно, но если вы не можете или не хотите, я опишу его в следующей главе.

4. Выход из процесса

Как вы уже видели, наше приложение закрывает соединение с базой данных.

В чем причина? - EventLoop

Как мы знаем, NodeJS выйдет, когда очередь EventLoop пуста и ничего не останется.

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

И последний пример изящного выключения сервера будет выглядеть так

Аргумент 0 означает выход с кодом «успеха».

Для выхода скодом «сбой» используйте 1.

Чтобы получить этот код выхода после завершения работы, выполните эту команду в терминале, где вы запускаете сервер вашего Node приложения.

По умолчанию NodeJS завершается с кодом процесса 0, если EventLoop пуст.

Резюме

Это не единственный способ корректно завершить работу сервера, он отлично подойдет для небольших проектов и может быть легко написан, но я не говорю, что в больших проектах он не нужен. В больших проектах, более вероятно использующих балансировку серверов (например, Nginx), вы можете балансировать нагрузку, не отправлять запросы на этот сервер и не завершать его.

У меня есть простой TCP-сервер, который прослушивает порт.

Я закрываю программу неправильно? Как я могу предотвратить это?

Вероятно, стоит добавить, что Ctrl-Z приостанавливает команду в * NIX и не закрывает ее. Если вы fg после Ctrl-Z, вы вернетесь туда, где остановились. Итак, ваш предыдущий узел все еще работает. Остерегайтесь, если вы делаете это для других команд! @ ruffin это должен быть ответ. Если вы выполнили действие Ctrl+Z , подходящей методологией может быть fg для оживления процесса, а затем Ctrl+C для правильного его завершения.

Чтобы завершить программу, вы должны использовать Ctrl + C . Если вы это сделаете, он отправит SIGINT , что позволяет программе законно изящество, отвязавшись от любых портов, которые он прослушивает.

Ctrl + C не работает для меня. В консоль вводится только ^C , и программа не завершается. @ Eleeist, что вы используете в качестве терминала? Это прекрасно работает для меня. Я использую приложение Mac OS X Terminal по умолчанию. Хорошо, спасибо за совет и извините за беспокойство. @ Джерри Какой терминал вы используете? Нет проблем с этим здесь, на моем Mac. @Brad Ах, черт возьми. Пройдя тестирование, я понял, что это один из моих других серверов, для которого требуется двойное касание. Извините за дезинформацию. Удален мой предыдущий комментарий. Есть ли альтернативный, более определенный способ сделать это, даже без изящества? Время от времени я получаю эту ошибку EADDRINUSE, даже если ничего не происходит, и мне просто нужно подождать некоторое время, прежде чем я смогу запустить @ jt0dd Ты всегда можешь kill -9 , но я бы не стал. Вы действительно уверены, что ваше приложение все еще остается открытым? У меня никогда не было этой проблемы. Как только мое приложение заканчивается, соединения всегда немедленно прекращаются. Я бы использовал netstat, чтобы определить, задерживается ли ваше приложение или что-то еще на этом порту. @Brad Это как-то связано с PM2. Я использую PM2, чтобы приложения работали и управляли используемой памятью, и это оставляло порт открытым после закрытия процесса. Я столкнулся с этой проблемой, когда использовал другой тип клавиатуры на другом языке. Убедитесь, что ваш Mac введен на английском языке Спасибо, я понятия не имел, что ты можешь сделать это, и это сэкономит мне так много времени. @Melkor Из любопытства, как вы останавливали свои приложения? @Brad закрыть cmd, открыть cmd, скопировать, вставить местоположение файла, cd расположение файла, npm start. Написал несколько случайных вещей, таких как выход или выход, Ctrl-C не работал, но неожиданно набрал ^ C и затем Enter сработал.

Ctrl + Z приостанавливает его, что означает, что он все еще может работать.

Ctrl + C фактически убьет его.

вы также можете убить его так:

Найдите идентификатор процесса (второй слева):

Это также может работать

Ctrl + C будет работать, но ни одна из этих команд не будет работать для меня. Не знаю почему? И я ищу решение командной строки Будьте осторожны с узлом killall, вы можете убить процесс, который не хотите убивать, если они соответствуют «узлу» вы можете захотеть поднять killall node в своем ответе, поскольку это действительно самый простой и надежный вариант (если вы в порядке с уничтожением всех экземпляров) killall не распознается как внутренняя или внешняя команда, работающая программа или командный файл. Я что-то пропустил? То же самое здесь . Нет ответа? Там написано, что killall не распознан. Ни одна из других команд не работает. Нужно ли перезагрузить компьютер или что? На какой ОС и версии вы работаете? Mac OS 10.14 имеет killall. Я вышел из сеанса ssh, сохраняя работоспособность сервера узлов, и при повторном входе в систему мне пришлось использовать опцию kill -9 PROCESS_ID.

Или, альтернативно, вы можете сделать все это в одной строке:

Вы можете заменить node внутри '\ snode\s' на любое другое имя процесса.

В этот момент вы можете просто использовать killall .

вы можете ввести .exit , чтобы выйти из node js REPL

Это предполагает, что вы находитесь в REPL для начала. Что если у меня запущен скрипт Node?

Если вы выполняете Node.js в интерактивном режиме (REPL):

Ctrl + C вернет вас в > приглашение, затем введите:

или просто используйте Ctrl + D .

Это работает и на Linux. Просто введите process.exit ()

$ sudo killall node в другом терминале работает с mac, а killall node не работает:

Скорее всего, вы сейчас в командной строке.

Дайте команде fg возобновить процесс на переднем плане.

введите Ctrl + C , чтобы правильно его убить.

Альтернативно вы можете убить его вручную следующим образом:

( ПРИМЕЧАНИЕ: для следующих команд может потребоваться root, поэтому sudo . - ваш друг)

или, если у вас нет pkill, это может сработать:

или, возможно, это:

иногда процесс перечисляет свой собственный grep, и в этом случае вам понадобится:

h/t @ruffin из комментариев по самому вопросу. У меня была такая же проблема, и его комментарий помог мне решить ее сам.

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

Чистым способом управления процессами сервера Node является использование пакета forever (от NPM ).

Установить Forever

npm install forever -g

Запустить Node Сервер

forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js

Результат:

info: Forever processing file: server.js

Выключение Node Сервер

forever stop server.js

Результат

info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj "/usr/bin/nodejs/node"

/path/to/your/project/server.js 23084 13176

Это приведет к чистому отключению вашего приложения Server.

Хотя это поздний ответ, я нашел это из Документы NodeJS:

Событие "выход" выдается, когда REPL завершается либо получением команды .exit в качестве входного сигнала, либо нажатием кнопки <ctrl>-C дважды для сигнала SIGINT, либо нажатием <ctrl>-D на сигнал "конец" на входной поток. Обратный вызов слушателя вызывается без каких-либо аргументов.

Итак, чтобы подвести итог, вы можете выйти:

  • Ввод .exit в nodejs REPL.
  • Дважды нажмите <ctrl>-C .
  • нажатие <ctrl>-D .
  • process.exit(0) означает естественный выход из REPL. Если вы хотите вернуть какой-либо другой статус, вы можете вернуть ненулевой номер.
  • process.kill(process.pid) - это способ убить using nodejs api из вашего кода или из REPL.

Если вы хотите остановить свой сервер с помощью npm stop или что-то вроде этого. Вы можете написать код, который убивает ваш серверный процесс следующим образом:

У меня возникла проблема, когда у меня работает несколько node серверов, и я хочу просто убить одну из них и переустановить ее из script.

Примечание. Этот пример находится в оболочке bash на Mac.

Чтобы сделать это, я обязательно сделаю мой вызов node максимально конкретным. Например, вместо вызова node server.js из каталога приложений я вызываю node app_name_1/app/server.js

Затем я могу убить его, используя:

kill -9 $(ps aux | grep 'node\ app_name_1/app/server.js' | awk '')

Это приведет только к уничтожению процесса node с запуском app_name_1/app/server.js.

Если вы запустили node app_name_2/app/server.js , этот процесс node будет продолжать работать.

Если вы решите, что хотите убить их, вы можете использовать killall node , как упомянули другие.

У меня есть простой TCP-сервер, который прослушивает порт.

Я закрываю программу неправильно? Как я могу предотвратить это?

Чтобы завершить программу, вы должны использовать Ctrl + C . Если вы это сделаете, он отправит SIGINT , что позволяет программе законно изящество, отвязавшись от любых портов, которые он прослушивает.

Ctrl + Z приостанавливает его, что означает, что он все еще может работать.

Ctrl + C фактически убьет его.

вы также можете убить его так:

Найдите идентификатор процесса (второй слева):

Это также может работать

Или, альтернативно, вы можете сделать все это в одной строке:

Вы можете заменить node внутри '\ snode\s' на любое другое имя процесса.

вы можете ввести .exit , чтобы выйти из node js REPL

Если вы выполняете Node.js в интерактивном режиме (REPL):

Ctrl + C вернет вас в > приглашение, затем введите:

или просто используйте Ctrl + D .

$ sudo killall node в другом терминале работает с mac, а killall node не работает:

Скорее всего, вы сейчас в командной строке.

Дайте команде fg возобновить процесс на переднем плане.

введите Ctrl + C , чтобы правильно его убить.

Альтернативно вы можете убить его вручную следующим образом:

( ПРИМЕЧАНИЕ: для следующих команд может потребоваться root, поэтому sudo . - ваш друг)

или, если у вас нет pkill, это может сработать:

или, возможно, это:

иногда процесс перечисляет свой собственный grep, и в этом случае вам понадобится:

h/t @ruffin из комментариев по самому вопросу. У меня была такая же проблема, и его комментарий помог мне решить ее сам.

на Linux попробуйте: pkill node

Хотя это поздний ответ, я нашел это из Документы NodeJS:

Событие "выход" выдается, когда REPL завершается либо получением команды .exit в качестве входного сигнала, либо нажатием кнопки <ctrl>-C дважды для сигнала SIGINT, либо нажатием <ctrl>-D на сигнал "конец" на входной поток. Обратный вызов слушателя вызывается без каких-либо аргументов.

Итак, чтобы подвести итог, вы можете выйти:

  • Ввод .exit в nodejs REPL.
  • Дважды нажмите <ctrl>-C .
  • нажатие <ctrl>-D .
  • process.exit(0) означает естественный выход из REPL. Если вы хотите вернуть какой-либо другой статус, вы можете вернуть ненулевой номер.
  • process.kill(process.pid) - это способ убить using nodejs api из вашего кода или из REPL.

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

Чистым способом управления процессами сервера Node является использование пакета forever (от NPM ).

Установить Forever

npm install forever -g

Запустить Node Сервер

forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js

Результат:

info: Forever processing file: server.js

Выключение Node Сервер

forever stop server.js

Результат

info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj "/usr/bin/nodejs/node"

/path/to/your/project/server.js 23084 13176

Это приведет к чистому отключению вашего приложения Server.

Если вы хотите остановить свой сервер с помощью npm stop или что-то вроде этого. Вы можете написать код, который убивает ваш серверный процесс следующим образом:

У меня возникла проблема, когда у меня работает несколько node серверов, и я хочу просто убить одну из них и переустановить ее из script.

Примечание. Этот пример находится в оболочке bash на Mac.

Чтобы сделать это, я обязательно сделаю мой вызов node максимально конкретным. Например, вместо вызова node server.js из каталога приложений я вызываю node app_name_1/app/server.js

Затем я могу убить его, используя:

kill -9 $(ps aux | grep 'node\ app_name_1/app/server.js' | awk '')

Это приведет только к уничтожению процесса node с запуском app_name_1/app/server.js.

Если вы запустили node app_name_2/app/server.js , этот процесс node будет продолжать работать.

Если вы решите, что хотите убить их, вы можете использовать killall node , как упомянули другие.

Читайте также: