LINUX.ORG.RU

Как лучше реализовать взаимодействие web + shell

 ,


0

2

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

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

Как лучше такое реализовать?

Сейчас думаю, что сайт пишет в БД все нажимаемые кнопочки на сайте (команды), а шелл-скрипт на хосте (хостах) опрашивает сайт каждые несколько секунд. Когда шелл-скрипт видит, что команда предназначена для его хоста (`hostname -f`), то выполняет её с указанным ID команды, а затем возвращает ответ на сервер результат о выполнении с этим ID, подтверждая, что команда выполнена успешно, или не успешно, или по некоторому таймауту команда может считаться не выполненной, или таймаута может не быть т.к. команду надо выполнить когда хост выйдет на связь опять.

Что-нибудь готовое, управление хостами через веб, имеется? Будет совсем хорошо, если оно будет распределённым т.е. подразумевает наличие множества хостов и единый интерфейс управления каждым — или будет дешевле на каждый хост в отдельности вешать отдельный веб-сервер для веб-интерфейса?

★★★★★

Это курс 3 профильного ВУЗа. Можно сказать хэллоуворлд.

Назыаается «планировщик задач» Но не тот что внутри ядра для процессов.

К примеру cron.

Могу написать такое на python/django. Цена 4000 тыр. Два дня разработки и отладки. Торг умнстен.

pup_kin
()
Ответ на: комментарий от theNamelessOne

шины/брокеры советовали

+++

Сейчас думаю, что сайт пишет в БД все нажимаемые кнопочки на сайте

Ты же вроде грамотный регистрант. «Сайт» - это интерфейс пользователя, они ничего никуда не пишет. Он общается по API (REST, JSON, GraphQl, websockets) с неким сервисом, который уже либо пишет в БД, либо отдаёт брокеру.

И напрашивается executor, который будет подписываться на события в БД или брокере и выполнять команды, скармливая результат тому же брокеру или в БД.

А «сайт» в его клиентской части точно так же, либо периодически опрашивает по API либо подписывается на изменения.

Т.е., получается система из минимум трёх компонент - сайт-клиент, бэк, экзекутор. Бэк и экзекутор общаются через БД или брокера. «Сайт» и бэк общаются по API.

vvn_black ★★★★★
()

Что-нибудь готовое, управление хостами через веб, имеется?

Конечно, тысячи их. Называются configuration management systems - Ansible, Salt etc.

vvn_black ★★★★★
()
Ответ на: комментарий от vvn_black

Зачем так сложно? Писать сайт на чём угодно с серверным рендерингом, хотя бы и на react ssr. Складывать в базу. Из базы извлекать, либо исполнять, либо на раскладывать в крон, контролировать исполнение, засовывать результат в базу.

Ну это конечно если хочется именно писать, а не воспользоваться существующими решениями. Если писать, то php идеален для такого, но и nodejs + react ssr тоже хороший вариант.

ixrws ★★★
()

Что-то мне подсказывает...

хотя, возможно, я и не прав, что Вам нужно что-то типа shellinabox, wtty, ajaxterm, wing, anyterm? Т.е., shell по https? По каким-то причинам ssh у Вас запрещён и решили так реализовать управление? Вполне неплохой вариант, кстати.

Возможно, я неправильно понял задачу.

Остальные варианты реализуются скриптами. Если кто не осиливает shell, то это уже в ансибль.

Moisha_Liberman ★★
()

Выглядит похоже на интерфейс любого CI, например, Jenkins.

static_lab ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.