Zerotier-Planet一键管理脚本-可自定义备份时间

Zerotier-Planet一键管理脚本-可自定义备份时间

  1. 默认时间:每天凌晨 2:00
  2. 你可以随时手动修改:时、分、天、周、月都能自定义
  3. 菜单里直接输入数字设置,不用记 cron 语法
  4. 设置 / 取消 / 查看 全部可视化
  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
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# Zerotier-Planet 一键管理脚本(可自定义备份时间)
# 功能:备份 / 恢复 / 查看备份 / 自定义定时备份 / 取消定时备份

# ====================== 固定配置(适配你的环境,不用改)======================
BASE_DIR="/data/disk/temp/docker-zerotier-planet"
CONTAINER_NAME="myztplanet"
BACKUP_PREFIX="ztplanet-data-backup"
RETENTION_DAYS=7
SCRIPT_PATH="$BASE_DIR/ztmanager.sh"
LOG_PATH="$BASE_DIR/backup.log"
# ==========================================================================

cd $BASE_DIR || exit

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# 备份函数(不停容器)
backup() {
    echo -e "${GREEN}[*] 开始自动备份...${NC}"
    BACKUP_FILE="${BACKUP_PREFIX}-$(date +%Y%m%d-%H%M%S).tar.gz"
    tar -zcf "$BACKUP_FILE" data/
    echo -e "${GREEN}[✓] 备份完成:$BACKUP_FILE${NC}"

    echo -e "${YELLOW}[*] 删除 ${RETENTION_DAYS} 天前旧备份${NC}"
    find $BASE_DIR -name "${BACKUP_PREFIX}-*.tar.gz" -mtime +${RETENTION_DAYS} -delete
    echo -e "${GREEN}[✓] 旧备份清理完成!${NC}"
    read -p "按回车返回菜单..."
}

# 查看所有备份
list_backup() {
    echo -e "${YELLOW}[*] 所有备份文件:${NC}"
    ls -lt ${BACKUP_PREFIX}-*.tar.gz 2>/dev/null | head -20
    read -p "按回车返回菜单..."
}

# 恢复函数
restore() {
    echo -e "${RED}[!] 警告:恢复会覆盖当前所有网络配置!${NC}"
    read -p "请输入要恢复的备份文件名:" FILE
    if [ ! -f "$FILE" ]; then
        echo -e "${RED}[✗] 文件不存在!${NC}"
        read -p "按回车返回菜单..."
        return
    fi

    echo -e "${YELLOW}[*] 停止容器...${NC}"
    docker stop $CONTAINER_NAME > /dev/null 2>&1

    echo -e "${YELLOW}[*] 恢复数据...${NC}"
    rm -rf data/
    tar -zxf "$FILE"

    echo -e "${YELLOW}[*] 启动容器...${NC}"
    docker start $CONTAINER_NAME > /dev/null 2>&1

    echo -e "${GREEN}[✓] 恢复成功!所有网络已还原!${NC}"
    read -p "按回车返回菜单..."
}

# 设置定时任务(自定义时间)
set_cron() {
    clear
    echo "=============================================================="
    echo "                      自定义定时备份                         "
    echo "=============================================================="
    echo "默认备份时间:每天 02:00"
    echo "请输入你要设置的备份时间(直接回车使用默认值)"
    echo "=============================================================="

    read -p "请输入小时(0-23,默认 2):" HOUR
    HOUR=${HOUR:-2}

    read -p "请输入分钟(0-59,默认 0):" MIN
    MIN=${MIN:-0}

    # 生成 cron 表达式
    cron_line="${MIN} ${HOUR} * * * $SCRIPT_PATH 1 >> $LOG_PATH 2>&1"

    # 先删除旧任务
    crontab -l 2>/dev/null | grep -v "$SCRIPT_PATH" | crontab -
    # 添加新任务
    (crontab -l 2>/dev/null; echo "$cron_line") | crontab -

    echo -e "\n${GREEN}[✓] 定时备份已设置成功!${NC}"
    echo -e "${BLUE}⏰ 备份时间:每天 ${HOUR}:${MIN}${NC}"
    read -p "按回车返回菜单..."
}

# 取消定时任务
unset_cron() {
    crontab -l 2>/dev/null | grep -v "$SCRIPT_PATH" | crontab -
    echo -e "${YELLOW}[✓] 已取消所有 Zerotier 定时备份任务${NC}"
    read -p "按回车返回菜单..."
}

# 查看当前定时任务
show_cron() {
    echo -e "${BLUE}[*] 当前定时备份任务:${NC}"
    crontab -l 2>/dev/null | grep "$SCRIPT_PATH"
    read -p "按回车返回菜单..."
}

# 主菜单
menu() {
    clear
    echo "=============================================================="
    echo "              Zerotier-Planet 一键管理脚本 V3.0               "
    echo "=============================================================="
    echo " 1. 【一键备份】自动备份 + 清理7天前旧包(不停容器)"
    echo " 2. 【查看备份】列出所有备份文件"
    echo " 3. 【一键恢复】从备份还原所有网络"
    echo "-------------------------------------------------------------"
    echo " 4. 【设置定时】自定义备份时间(默认每天 02:00)"
    echo " 5. 【取消定时】关闭自动备份"
    echo " 6. 【查看定时】查看当前定时任务"
    echo "-------------------------------------------------------------"
    echo " 0. 退出"
    echo "=============================================================="
    read -p "请输入选项:" CHOICE

    case $CHOICE in
        1) backup ;;
        2) list_backup ;;
        3) restore ;;
        4) set_cron ;;
        5) unset_cron ;;
        6) show_cron ;;
        0) exit 0 ;;
        *) echo -e "${RED}输入错误!${NC}" && sleep 1 && menu ;;
    esac
    menu
}

# 命令行直接执行备份(供定时任务调用)
if [ "$1" == "1" ]; then
    backup
    exit 0
fi

# 启动菜单
menu
  1. 菜单 4 → 设置自定义定时备份

    • 默认:每天 02:00
    • 你想改 03:15 → 输入 3 → 输入 15
    • 你想改 凌晨 1 点 → 输入 1 → 回车(默认 0 分)
    • 直接两次回车 = 使用默认 02:00
  2. 菜单 5 → 取消定时
  3. 菜单 6 → 查看当前定时时间