Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

daed 默认不会自动更新 Geo 文件,本文提供一套完整的自动更新方案:多源轮询下载、临时目录隔离、docker 自动重启、crontab 定时执行。
daed 默认不会自动更新 Geo 文件(geoip.dat 和 geosite.dat)。本文提供一套完整的自动更新方案,支持多源轮询下载、断点续传、定时执行。
daed(以及底层 dae)只负责加载 /etc/daed/ 目录下的 Geo 文件,不会主动检查更新或下载新版本。Geo 数据库(尤其是 geosite)更新频率较高,通常每月都有更新,手动更新费时费力。
本文提供一套生产级解决方案:
sudo nano /usr/local/bin/update-daed-geo.sh
sudo chmod +x /usr/local/bin/update-daed-geo.sh
#!/bin/bash
LOG="/var/log/daed-geo-update.log"
TARGET_DIR="/etc/daed"
echo "=== $(date '+%Y-%m-%d %H:%M:%S') 开始更新 Geo 文件 ===" >> $LOG
mkdir -p "$TARGET_DIR"
chmod 755 "$TARGET_DIR"
TMP_DIR=$(mktemp -d)
cd "$TMP_DIR" || exit 1
download_file() {
local file_name=$1
echo "开始下载 $file_name..." >> $LOG
echo " -> 尝试从 jsDelivr CDN 下载..." >> $LOG
curl -fsSL --connect-timeout 15 --speed-limit 1024 --speed-time 10 -o "$file_name" "https://cdn.jsdelivr.net/gh/v2rayA/dist-v2ray-rules-dat@master/$file_name"
if [ ! -s "$file_name" ]; then
echo " -> jsDelivr 失败,尝试从 Worker 镜像下载..." >> $LOG
curl -fsSL --connect-timeout 15 --speed-limit 1024 --speed-time 10 -o "$file_name" "https://gh.720g.workers.dev/https://github.com/v2rayA/dist-v2ray-rules-dat/raw/master/$file_name"
fi
if [ ! -s "$file_name" ]; then
echo " -> 镜像源全败,尝试从 GitHub 原源下载..." >> $LOG
curl -fsSL --connect-timeout 15 --speed-limit 1024 --speed-time 10 -o "$file_name" "https://github.com/v2rayA/dist-v2ray-rules-dat/raw/master/$file_name"
fi
}
download_file "geoip.dat"
download_file "geosite.dat"
if [ -s "geoip.dat" ] && [ -s "geosite.dat" ]; then
echo "下载成功,开始无感替换文件..." >> $LOG
docker stop daed >> $LOG 2>&1
mv geoip.dat "$TARGET_DIR/geoip.dat"
mv geosite.dat "$TARGET_DIR/geosite.dat"
chmod 644 "$TARGET_DIR"/*.dat
docker start daed >> $LOG 2>&1
echo "=== 更新成功 === $(date '+%Y-%m-%d %H:%M:%S')" >> $LOG
else
echo "错误:Geo 文件下载失败,保留原系统文件!" >> $LOG
fi
if [ "$(docker inspect -f '{{.State.Running}}' daed 2>/dev/null)" != "true" ]; then
echo "警告:检测到 daed 未在运行,正在强制拉起..." >> $LOG
docker start daed >> $LOG 2>&1
fi
rm -rf "$TMP_DIR"
echo "" >> $LOG
脚本采用三级降级策略,确保在国内环境下稳定下载:
| 优先级 | 来源 | 说明 |
|---|---|---|
| 第一优先 | jsDelivr CDN | 国内直连速度快且稳定 |
| 第二优先 | Worker 镜像 | gh.720g.workers.dev 提供 GitHub 加速 |
| 第三优先 | GitHub 原源 | 兜底方案 |
下载在临时目录中完成,只有两个文件都下载成功才会触发替换,任何一步失败都保留原文件。
替换时自动 docker stop → 替换文件 → docker start,切换过程对用户透明。
脚本最后检查 daed 运行状态,确保任何情况下 daed 保持运行,防止服务器断网。
sudo /usr/local/bin/update-daed-geo.sh
cat /var/log/daed-geo-update.log
sudo crontab -e
写入以下内容(每周日凌晨 3:10 执行):
10 3 * * 0 /usr/local/bin/update-daed-geo.sh
tail -f /var/log/daed-geo-update.log
通过本文的方案,可以实现 daed Geo 文件的自动化更新,无需手动干预。建议先测试运行确认无误后,再配置定时任务。