Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 10

Перезагрузка Express-сервера самим сервером

26.05.2016, 17:20. Показов 4753. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как мне из скрипта а) его завершить, б) перезагрузить?

Предполагается, что в скрипте запущен сервер Express.

Хочу с клиента перезагружать, после изменения параметров, которые не вступят в силу, если не перезагрузится скрипт.

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

Второй вариант использования этой возможности можно описать так:
сервер запускается как обычно
делается еще одна программа, которая висит в трее с менюшкой, в которой есть возможность настроить сервер, запустить, перезапустить, вырубить. Ну чтобы не через командную строку это делать.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2016, 17:20
Ответы с готовыми решениями:

Бурное общение сервера с самим собой
Здравствуйте. На сервере установлены роли: контроллер домена, DNS и DHCP. Все компьютеры в сети отключены (работают только 5 виртуальных...

Перезагрузка сервера
Всем привет. Имею сервер в виде uname -a 10.1-RELEASE-p31 FreeBSD 10.1-RELEASE-p31 #31: Mon Mar 28 11:15:10 MSK 2016...

Удаленная перезагрузка сервера
Есть сервер, с материнкой ASUS p8z77-v и ununtu server. Допустим ситуация, сервер завис, по x2go к нему не достучаться. Как его удаленно...

10
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
26.05.2016, 18:46
Цитата Сообщение от khusamov Посмотреть сообщение
делается еще одна программа, которая висит в трее с менюшкой, в которой есть возможность настроить сервер, запустить, перезапустить, вырубить. Ну чтобы не через командную строку это делать.
ну это уж вы загнули...
я кстати не люблю с этими менюшками, мне как-то консоль в данном случае по душе

Цитата Сообщение от khusamov Посмотреть сообщение
Впрочем было бы достаточно не скрипт перезагружать, а вырубить слушателя от Express, а потом снова его врубить.
может конфиги какие?

а вообще я бы подавал сигналы, например SIGTSTP, а потом SIGCONT это если вам нужно только приостановить процесс, а потом его возобновить

но наверное вам всё-таки надо его перезагрузить
тогда я предлагаю самый простой способ - сначала убить, а потом заново поднять
это можно сделать с помощью bash (bat) или реально сделать программу, которая бы следила за сервером как за дочерним процессом и при надобности убивала, а потом запускала его заново


если вы уж хотите с GUI, то сначала скажите какие яп вы знаете. для этой задачи подойдёт хоть php develstudio (но я такого не говорил)

короче
расскажите поподробнее какой у вас сервер, если он стоит на локалке, то вообще легко, если он стоит на vps например, то это уже намного сложнее)

Добавлено через 1 минуту
в общем-то проблема в том, что сервер когда закрывается он уже себя запустить не сможет, потому что он уже умер
0
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 10
26.05.2016, 18:50  [ТС]
Это нужно для удобства пользователю. Он командную строку боится. Впрочем они все ее боятся.

Сервер... вообще-то программа на две части поделена. Сервер и клиентские. На клиентских просто браузер. На сервере js-код. На сервере будет в трее для пользователя. И еще в клиентских будет кнопка перезапуска.

Судя по тому что вы написали, перезапуск сервера, силами самого скрипта, где этот сервер создается, нельзя. Печально.

А почему http.createServer() такой странный? Создать можно, а вот остановить, перезапустить с иными настройками - нельзя?

В Express-е тоже есть странности. Типа роутер можно подключить, а вот уже отключить на ходу нельзя. То есть, если нужно иная схема маршрутизации, то приходится все перезагружать заново.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
26.05.2016, 20:16
Лучший ответ Сообщение было отмечено khusamov как решение

Решение

Цитата Сообщение от khusamov Посмотреть сообщение
То есть, если нужно иная схема маршрутизации, то приходится все перезагружать заново.
нет, достаточно использовать свои миделверы и эта проблема будет решена достаточно просто.
Цитата Сообщение от khusamov Посмотреть сообщение
Создать можно, а вот остановить, перезапустить с иными настройками - нельзя?
можно остановить, для этого используется .close()
соответственно можно запустить с новыми настройками через .listen()
но как я уже сказал, тогда надо будет переписать код запуска сервера, а это означает переписать основу самого сервера

и ещё вопрос, вам не кажется небезопасным давать каждому пользователю возможность перезапустить сервер?
и как будут меняться параметры сервера?
0
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 10
26.05.2016, 20:22  [ТС]
close я только сейчас заметил
https://nodejs.org/dist/latest... e_callback

Получается что код останова такой:

JavaScript
1
2
3
4
5
var express = require('express');
var app = express();
var server = app.listen(3000);
...
server.close();
и ещё вопрос, вам не кажется небезопасным давать каждому пользователю возможность перезапустить сервер?
Будет. Поэтому придется давать не всем пользователям.

и как будут меняться параметры сервера?
Например пересобрать маршрутизацию.

нет, достаточно использовать свои миделверы и эта проблема будет решена достаточно просто.
А как это делать, без остановки сервера?
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
26.05.2016, 20:47
Цитата Сообщение от khusamov Посмотреть сообщение
А как это делать, без остановки сервера?
достаточно легко
у вас ведь есть app
у него есть .use()
.use(req, res, next)
req - запрос к серверу
res - ответ клиенту
next - передача шага следующему миделверу, если этот не обработал

вообще тогда придётся менять почти всё
у вас должна быть ваша маршрутизация в виде модулей, к которым проводятся имена
то есть примерно так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const login=require("mdlw/login"),
url=require("url").parse;
 
var VirtualRoad = {
    '/login': login,
    '/reg': reg,
    '/clients': clients
}
 
app.use((req, res, next) => {
    if (req.method !== 'GET')
        next();
    let path = url(req.url).pathname;
    if (path in VirtualRoad)   
        VirtualRoad[path](req, res, next);
    else
        next();
})
ну это грубый пример
0
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 10
26.05.2016, 20:52  [ТС]
Я понял. Сделать свою маршрутизацию. Теперь достаточно легко на лету менять массив VirtualRoad.

Жалко что нет метода app.unuse(), который исключил бы нужный мидлваре из приложения...

Добавлено через 49 секунд
Вообще-то в этом случае проще остановить сервер. Удалить app, собрать новый app и запустить сервер.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
26.05.2016, 21:27
Цитата Сообщение от khusamov Посмотреть сообщение
Вообще-то в этом случае проще остановить сервер. Удалить app, собрать новый app и запустить сервер.
кому как
я бы изначально сделал эту функцию в архитектуре (изменение маршрутизации на ленту)

но вам могу предложить вот такое
Code
1
pkill %appname% && node app
%appname% можно задать через process.title
0
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 10
26.05.2016, 21:40  [ТС]
pkill это уже лишнее, раз есть метод close() сервера.

Добавлено через 14 секунд
Спасибо за ответы!
0
Coding is art
Эксперт JS
540 / 423 / 154
Регистрация: 04.09.2013
Сообщений: 1,066
28.05.2016, 23:02
Если я правильно понимаю задачу
То вам нужно сделать cli своему приложению и через клиента отправлять команду ему..
ну.. допустим есть модуль nodemon который следин за изменением файлов и перезапускает приложение
Но можно и в ручную перезапустить написав rs
Всё что вам остаётся сделать - отправить от пользователя команду и сказать вашему скрипту выполнить rs в консоле..
process.exec( 'rs' ) как-то так наверное..
ну или не использую nodemon подобрать команду типо 'process kill & node app' ( честно не владею командными строками, не скажу как правильно ) но суть в том что бы запихнуть их в что-то похожее на process.exec
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
29.05.2016, 00:13
Цитата Сообщение от muxahuk1214 Посмотреть сообщение
но суть в том что бы запихнуть их в что-то похожее на process.exec
команда, которую вы показали только убивает процесс и запускает приложение заново

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

Добавлено через 1 минуту
только нету у нас process.exec в вашем понимании
у нас есть общение в этим сервером через стандартные вводы выводы текста и метод send
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2016, 00:13
Помогаю со студенческими работами здесь

При отсутствии сервера самому становиться сервером
У меня маленькая прога - мини чат, там реализация и для создания сервера и для создания клиента, но все это отдельно, то есть по нажатию...

Автоматическая перезагрузка сервера в рандомное время
Нужно сделать автоматическую перезагрузку сервера в рандомные часы (6 + (0-3)). Возникла проблема с тем что перед цифрой во времени стоит...

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

Организация сервера для работы с ним (сервером) по RDP
Доброго вечера уважаемые форумчане! Возникла потребность на работе организовать сервер под 1С, больше ничего на нем запускать в ближайшем...

Организовать связь с удаленным сервером (мониторинг работоспособности сервера)
Здравствуйте! Имеется: 1) 2 VPS сервера, которые иногда по неизвестным причинам не работают некоторое время (бывает по известным -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru