刚开始想网上找一个OpenWRT系统上更新Hosts文件,但是发现要么就是简单粗暴直接下载要么只能下载单个文件再启动服务。
毕竟不是运维出身,于是花了一晚上功夫边学边写的,目前运行良好。
更新日志
20240716
修复了log输出时时间戳不准确的问题。
20240624
修改wget方式,合并去重以及格式化。
20240601
增加了下载是否成功并且行数大于0验证。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #!/bin/sh
set -e
HOSTS_URL1="https://hosts.gitcdn.top/hosts.txt" HOSTS_URL2="https://hosts.gitcdn.top/hosts.txt" HOSTS_URL3="https://raw.hellogithub.com/hosts"
UPDTLOG_FILE="/tmp/update_hosts.log" TMPHOST_FILE="/tmp/tmp_hosts" ETCHOST_FILE="/etc/hosts"
{ /usr/bin/wget --no-hsts -qO- "$HOSTS_URL1" /usr/bin/wget --no-hsts -qO- "$HOSTS_URL2" /usr/bin/wget --no-hsts -qO- "$HOSTS_URL3" } | sed -e '/^[[:space:]]*$/d' -e '/^[0-9]/!d' | sort -uk2 | awk '!seen[$0]++' | awk '{printf "%-20s %s\n", $1, $2}' > "$TMPHOST_FILE"
LINE_COUNT=$(wc -l < "$TMPHOST_FILE")
log_message() { echo "$(date "+%Y-%m-%d %H:%M:%S") $1" >> "$UPDTLOG_FILE" }
if [ -s "$TMPHOST_FILE" ] && [ "$LINE_COUNT" -gt 0 ]; then cp "$TMPHOST_FILE" "$ETCHOST_FILE" && \ /etc/init.d/dnsmasq restart && \ log_message "Update Hosts File Successful[Records:$LINE_COUNT]" else log_message "Update Hosts File Failed[Records:$LINE_COUNT]" exit 1 fi
trap 'rm -f "$TMPHOST_FILE"' EXIT
|