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
|