3

Как можно настроить виртуальную машину сервера Ubuntu на значение /etc/hostname/ равным значению для назначенного IP-адреса виртуальной машины при запуске?

Я создаю образ виртуальной машины сервера Ubuntu для запуска Hadoop. Когда клиент взаимодействует с Hadoop, он возвращает адреса узлов в кластере (даже если в этом случае они все процессы на одном компьютере) для взаимодействия с клиентом. Эти адреса определяются разрешением имени хоста Java, которое, как я понимаю, не совсем надежно. Мне посоветовали лучший способ обойти это - установить /etc/hostname/ на назначенный IP-адрес единственного сетевого интерфейса. В качестве альтернативы может быть подход установки переменной окружения и последующей передачи ее JVM, выполняющей каждый процесс Hadoop.

2 ответа2

6

я добавил

hostname `hostname -I`

в '/etc/rc.local`, и это правильно установит имя хоста на текущий назначенный IP-адрес.

3

Использование фиксированного IP было бы самым простым решением. Если вы можете это сделать, просто измените /etc/hostname на гостевой системе, чтобы она выглядела следующим образом (конечно, используя правильный IP):

192.168.1.10

Если вы не можете / не хотите использовать это, вы можете настроить cronjob, который читает IP-адрес системы и обновляет /etc/hostname соответственно. Эта команда даст вам ваш IP:

ifconfig | grep Bcast | awk '{print $2}' | sed 's/addr://'

Теперь добавьте новый crontab для root:

sudo crontab -e

Это вызовет любой редактор, который вы определили. Добавьте эту строку в файл crontab:

@reboot ifconfig | grep Bcast | awk '{print $2}' | sed 's/addr://' > /etc/hostname

Это будет запускать команду один раз при каждой загрузке машины и сохранять ее выходные данные (IP) в /etc/hostname . Возможная проблема заключается в том, что демон cron запускается до назначения IP-адреса. В этом случае вы можете настроить его запуск каждые пять минут или около того:

*/5 * * * * ifconfig | grep Bcast | awk '{print $2}' | sed 's/addr://' > /etc/hostname

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .