Варианты настройки Linux-бокса из Java - PullRequest
2 голосов
/ 29 августа 2009

Я пытаюсь создать Java-приложение для управления серверами Linux через веб-интерфейс. Это плохая идея выполнять каждую задачу, вызывая оболочку bash? Есть ли другие варианты, кроме как использовать C, Perl или другой язык?

Ответы [ 9 ]

2 голосов
/ 29 августа 2009

Это не обязательно плохая идея использовать bash для выполнения реальной работы. Было бы полезно, если бы вы дали нам больше представления о том, что именно меняет веб-интерфейс.

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

1 голос
/ 29 августа 2009

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

Таким образом, в этом смысле внесение изменений в вашу Java-программу снижает сложность передачи информации взад и вперед. С другой стороны, если вам проще Bash, вы можете найти его более быстрым и гибким.

1 голос
/ 29 августа 2009

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

0 голосов
/ 29 августа 2009

Здесь есть два вопроса:

  1. Должны ли вы попытаться выполнить настройку в Java или вывести ее на экстернализацию?
  2. Предполагая, что вы его вывели на экстернализацию, следует использовать сценарии bash.

В этом случае ответ на вопрос 1) зависит. Подобные вещи сложно реализовать в чистой Java. Это оставляет два варианта; выполнить задачу с помощью Process или попытаться сделать это в библиотеке с собственным кодом через JNI или JPA. Последний подход сложен и дает вам сбои JVM, если вы допустили ошибку, поэтому я бы исключил это.

С другой стороны, если вы можете найти хороший стандартный или сторонний API Java, который делает то, что вам нужно (без заражения вашей JVM ненадежным JNI и т. Д.), Вы должны использовать это.

Ответ на 2) заключается в том, что сценарии bash будут работать так же, как и любой другой язык сценариев. Я думаю, что использование сценариев дает вам больше гибкости. Например, если вам нужно что-то сделать, чтобы компенсировать различия в разных вариантах Linux, UNIX или даже Windows (!), Вы можете включить это в внешние сценарии. (Вывод заключается в том, что скрипты должны быть настраиваемыми, поэтому не встраивайте их в свой исходный код!)

Другой альтернативой может быть прямой запуск команд (например, ifconfig) с использованием полного имени команды и предоставление аргументов в виде массива строк и т. Д. Но если ваше приложение не выполнит внешнюю команду раз в минуту это, вероятно, не стоит усилий по написанию кода (Java) и потери гибкости / настраиваемости.

0 голосов
/ 29 августа 2009
  1. В Java есть некоторые классы для настройки Linux (по крайней мере, в OpenJDK). Проверьте OperatingSystemMXBean или что-то в этом роде.

  2. Вам лучше написать свою собственную утилиту конфигурирования сервера на предпочитаемом вами языке, обезвредить ее, обезопасить, а затем вызвать ее с помощью bash из приложения Java.

0 голосов
/ 29 августа 2009

Ответ будет зависеть от того, почему вы это делаете и почему другие более очевидные решения невозможны. Было бы хорошо знать, почему вы выбрали бы свой собственный вариант, а не установку Webmin , или почему вы предпочитаете использовать веб-интерфейс вообще, а не VNC для управления блоком. Есть некоторые очевидные ответы на последующие (например, проблемы с брандмауэром), но нет очевидной причины для первого. Не зная больше о требованиях, бессмысленно отвечать на вопросы о деталях реализации, таких как скрипты bash или perl или C.

0 голосов
/ 29 августа 2009

У меня есть сервер сокетов, где я выполняю различные операции (например, с помощью ifconfig, вызывая shell) и планирую интегрировать клиента в приложение JSF. Потому что у меня нет опыта, и я собираюсь сделать это своим дипломным проектом, но я не уверен, что вызов bash из java для настройки linux - хорошее решение.

0 голосов
/ 29 августа 2009

Проблемы безопасности бросаются на меня Если у вас есть такая форма, как «команда типа», то кто-то умный может воспользоваться некоторыми вещами. Например, «настроить сеть» - это хорошо, но «настроить сеть; установить руткит» можно ввести, потому что точка с запятой позволяет объединять команды в цепочку.

В общем, это не тесная интеграция. Если это личный проект, дерзайте. Это хороший учебный проект, чтобы превратить процедурный скрипт в Java-программу. Если это серьезное усилие по воссозданию множества различных инструментов администрирования веб-приложений, я бы серьезно рекомендовал пропустить это. Вещи VPanel / CPanel, которые я видел, я ненавижу. Когда-то существовал админ на Linux, основанный на php, который выглядел нормально, но я просто нахожу их легко выучить, легко перерасти, потому что сеть и сообщество полны знаний командной строки.

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

0 голосов
/ 29 августа 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...