Как работать с запущенным Node.js приложением через коммандную строку?

У меня есть приложение-вебсайт, которое работает с многими клиентами в реальном времени.
И это приложение запущено как демон. Хотелось бы иметь возможность из консоли управлять этим приложением (но в тоже время не делать cli приложение.. пусть оно постоянно висит в фоне и при моем выходе из консоли не закрывается).

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

Как это правильно организовать? Спасибо
  • Вопрос задан
  • 822 просмотра
Пригласить эксперта
Ответы на вопрос 3
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Вам нужно сделать два приложения, одно - сервис, второе - CLI, а между ними передавать информацию через один из таких способов: HTTP (самое простое и удобное, но нужно реализовать защиту урлов управления или по секретному ключу или по IP или через аутентификацию), через шину сообщений (от Redis, ZMQ, RabbitMQ и т.д.), через файлы конфигурации (CLI пишет в файлы, а сервис мониторит изменения через fs.watch), через IPC и есть еще куча способов.
Есть и второй способ, Вы можете у HTTP сервера своего нодовского сделать еще и встроенный telnet сервер или ssh сервер и подключаться к нему консолью, как я это люблю. Вот тут человек делает нечто подобное: www.davidmclifton.com/2011/07/22/simple-telnet-ser... Есть даже библиотеки уже тут: https://www.npmjs.com/package/ssh или тут: https://github.com/mscdex/ssh2
Ответ написан
StrangeAttractor
@StrangeAttractor
Берёте и реализуете нужный функционал в формате web-сервиса, потом curl-ом через HTTP...
Ответ написан
Комментировать
k12th
@k12th
console.log(`You're pulling my leg, right?`);
А вам критично по какой-либо причине подключаться к уже существующему инстансу приложения, у вас что-то хранится прямо в памяти? А то ведь всегда можно в папке приложения вызвать node и прямо в REPL проимпортить нужные модули, подключиться к БД и сделать все, что нужно. Если что-то нужно будет сделать много раз — можно сохранить в скрипт.

P.S. Ваши молитвы были услышаны, сегодня на dailyjs написали про vantage — ровно то, чего вы и хотели.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы