Linux下自动更新hosts文件的脚本
把部分常用域名的IP缓存至hosts文件中,再配合nscd等服务,可以提升高并发高负载下服务器性能。但是需要一个脚本定期执行,来保证缓存的IP地址是正确的,以免IP发生变化造成服务不可用,引发一系列其它问题。
参考 https://www.cnblogs.com/scue/p/3587836.html 修改了一份适用于我方Ubuntu环境的脚本,分享如下:
#!/bin/bash -
#===============================================================================
#
# FILE: hostupdate
#
# USAGE: ./hostupdate
#
# DESCRIPTION: 实时更新自己电脑上的hosts,加速网络的访问。
#
#===============================================================================
rm -f /tmp/host_new*
host_new=/tmp/host_new$$
# 1. 获取旧hosts文件来源
if [[ -f "$1" ]]; then
ref_host="$1" # 参考的host来源
else
ref_host=/etc/hosts # 默认从/etc/hosts上获取链接参考
fi
touch $host_new && tail -f $host_new &
# 2. 更新hosts
#echo -e "\e[0;35m --> 开始更新hosts文件\e[0m" # purple
cat $ref_host | while read line; do
if [[ ${line:0:1} == '#' ]] || [[ ${#line} == 0 ]] \
|| [[ $(echo $line | grep ::) != "" ]] \
|| [[ $(echo $line | grep ^10\.) != "" ]] \
|| [[ $(echo $line | grep localhost) != "" ]] \
|| [[ $(echo $line | grep $HOSTNAME) != "" ]]; then
echo $line >> $host_new
else
addr=$(echo $line|awk '{print $2}')
link=$(nslookup "$addr" | sed '/^$/d' | sed -n '$p' | sed -n 's/Address: //gp')
if [[ "$link" != "" ]]; then
printf "%-19s%s\n" $link $addr >> $host_new
else
echo $line >> $host_new
fi
fi
done
# 3. 复制至 /etc/hosts
#echo -en "\e[0;35m --> 更新hosts文件完毕,是否将新文件 $host_new 移动至 /etc/hosts[Y/n]:\e[0m" # purple
#read -p "" reply
#文件有变化时复制
if [[ $(md5sum $host_new | awk '{print $1}') != $(md5sum $ref_host | awk '{print $1}') ]]; then
sudo mv /etc/hosts{,.bak}
sudo cp $host_new /etc/hosts
sudo /etc/init.d/nscd restart
fi
#echo -e "\e[0;36m --> 全部操作完成,Enjoy!\e[0m" # cyan