/ etc / hosts не поддерживает циклический перебор, но вы можете написать простой скрипт bash, который заменяет запись, помеченную комментарием #RoundRobin (или любым другим тегом, который вы хотите использовать, просто отразите его в строке grep в сценарии) ,
#!/bin/bash
fqdnips=( $(nslookup sub.domain.com|grep Address:|awk -F\ '{ print $2 }'|grep -v '#') )
new=`printf "${fqdnips[@]}"`
old=`grep "#RoundRobin" /etc/hosts|awk -F\ '{ print $1 }'`
sed -i "s/$old/$new/g" /etc/hosts
Приведенный выше скрипт получает вывод nslookup для sub.domain.com и сохраняет его в массиве. Затем он печатает самое верхнее значение в $ new и извлекает существующее значение для тега #RoundRobin, назначенного в / etc / hosts ... и, наконец, выполняет sed-замену
Запись файла / etc / hosts будет выглядеть так
127.0.0.1 localhost
::1 localhost
11.12.13.14 sub.domain.com #RoundRobin
Наконец, поместите этот скрипт в crontab для запуска каждый час или около того, и теперь у вас будет / etc / host round-robin.
Это особенно полезно, если у вас есть закодированная страница, которая извлекает некоторые данные из API, и поиск DNS для сервера API вызывает много времени зависания при выполнении скрипта страницы ... что приводит к высокому потреблению ЦП для того, что в противном случае кажется простой страницей. Чтобы избежать дорогостоящего поиска DNS (особенно если ваш сайт выполняет сотни из них в минуту при интенсивном трафике), вы должны использовать / etc / hosts для разрешения полного доменного имени удаленного сервера API. Это значительно сократит использование ЦП для извлечения данных API и создания страницы.