У меня проблема с получением обновленного имени хоста в Java в CentOS 7.6.
Вот мой сценарий:
- В моем ящике 4 сетевых адаптера, из которых 1 NI C используется и подключается к сети
- Пользователь делает fre sh установку программного обеспечения в этот ящик с помощью файла ISO
- Мой Java процесс запускается после fre sh установки
- К этому времени активен и доступен единственный интерфейс обратной петли. Команда
"ifconfig"
показывает только lo, а "ifconfig -a"
показывает все 4 сетевых адаптера без IP и lo. - Мое приложение Java получает имя хоста с помощью вызова
"InetAddress.getLocalHost().getHostName()".
Оно возвращает "localhost.localdomain"
, что ожидается как IP для eth0 и имя хоста еще не установлены. Теперь пользователь устанавливает IP-адрес для eth0, также задается имя хоста. Программное обеспечение внутренне обновляет следующее:
- установить имя хоста с помощью linux команды hostname
- updates / etc / hostname
- Сделать недействительным кеш nscd (используя команду 'nscd -i hosts')
- добавить запись для нового IP-адреса и имени хоста в / etc / hosts
- обновляет HOSTNAME = в / etc / sysconfig / network
- HOSTNAME env переменная также установлена в Linux
Отображается проверенный вывод команды 'hostname' в Linux терминале и пользовательский set-hostname. Linux команда 'hostname -i'
разрешает только что установленный IP.
- Мое ранее запущенное приложение Java, которое все еще работает, теперь снова выполняет тот же вызов
'InetAddress.getLocalHost().getHostName()'
. Но даже на этот раз он возвращается как 'localhost.localdomain'
вместо настроенного имени хоста.
Я подумал, не вызывает ли кеширование InetAddress проблему. Пытался отключить флаги безопасности networkaddress.cache.ttl
и networkaddress.cache.negative.ttl
, но все равно не повезло.
Есть идеи по этой проблеме? Рекомендуется ли в этом случае использовать InetAddress.getLocalHost().getHostName()
.
С уважением, Шрини