duckdns 后台维护更新cron脚本

2025-07-01  本文已影响0人  老陕西
$ crontab -e
* * * * * /home/YOUR_NAME/duckdns_update.sh
#!/bin/bash
# /home/YOUR_NAME/duckdns_update.sh

# 配置项
DOMAIN="YOUR_DOMAIN_NAME"   # 只填子域名,比如 myhome
TOKEN="YOUR_TOKEN"          # 你的DuckDNS token

# 自动获取脚本所在目录和文件名
SCRIPT_PATH="$(readlink -f "$0")"
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"
SCRIPT_BASE="$(basename "$SCRIPT_PATH" .sh)"
LOG="${SCRIPT_DIR}/${SCRIPT_BASE}.log"
CACHE="${SCRIPT_DIR}/${SCRIPT_BASE}.cache"

# 获取当前时间戳
now() {
    date "+%Y-%m-%d %H:%M:%S"
}

# 获取当前公网IPv4地址
CURRENT_IP=$(curl -s https://ipv4.icanhazip.com/ | tr -d '\n')

# 获取上次更新的IP
LAST_IP=""
[ -f "$CACHE" ] && LAST_IP=$(cat "$CACHE")

if [ "$CURRENT_IP" != "$LAST_IP" ]; then
    RESPONSE=$(curl -s "https://www.duckdns.org/update?domains=${DOMAIN}&token=${TOKEN}&ip=${CURRENT_IP}&verbose=true")
    echo "$CURRENT_IP" >"$CACHE"
    echo "$(now) DuckDNS updated: $RESPONSE" >>"$LOG"
else
    echo "$(now) No IP change: $CURRENT_IP" >>"$LOG"
fi

# 保留日志文件最后100行
tail -n 100 "$LOG" >"${LOG}.tmp" && mv "${LOG}.tmp" "$LOG"

上一篇 下一篇

猜你喜欢

热点阅读