alcex commited on
Commit
9a67439
·
verified ·
1 Parent(s): 3a9483b

Create sync_data.sh

Browse files
Files changed (1) hide show
  1. sync_data.sh +114 -0
sync_data.sh ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/sh
2
+
3
+ # 检查环境变量
4
+ if [ -z "$HF_TOKEN" ] || [ -z "$DATASET_ID" ]; then
5
+ echo "Starting without backup functionality - missing HF_TOKEN or DATASET_ID"
6
+ exit 1
7
+ fi
8
+
9
+ # 激活虚拟环境
10
+ . /home/app/venv/bin/activate
11
+
12
+ # 创建Python脚本
13
+ cat > /home/app/uptime-kuma/hf_sync.py << 'EOL'
14
+ from huggingface_hub import HfApi
15
+ import sys
16
+ import os
17
+ import tarfile
18
+ import tempfile
19
+
20
+ def upload_backup(file_path, file_name, token, repo_id):
21
+ api = HfApi(token=token)
22
+ try:
23
+ api.upload_file(
24
+ path_or_fileobj=file_path,
25
+ path_in_repo=file_name,
26
+ repo_id=repo_id,
27
+ repo_type="dataset"
28
+ )
29
+ print(f"Successfully uploaded {file_name}")
30
+ except Exception as e:
31
+ print(f"Error uploading file: {str(e)}")
32
+
33
+ def download_latest_backup(token, repo_id):
34
+ try:
35
+ api = HfApi(token=token)
36
+ files = api.list_repo_files(repo_id=repo_id, repo_type="dataset")
37
+ backup_files = [f for f in files if f.startswith('backup_') and f.endswith('.tar.gz')]
38
+
39
+ if not backup_files:
40
+ print("No backup files found")
41
+ return
42
+
43
+ latest_backup = sorted(backup_files)[-1]
44
+
45
+ with tempfile.TemporaryDirectory() as temp_dir:
46
+ filepath = api.hf_hub_download(
47
+ repo_id=repo_id,
48
+ filename=latest_backup,
49
+ repo_type="dataset",
50
+ local_dir=temp_dir
51
+ )
52
+
53
+ if filepath and os.path.exists(filepath):
54
+ with tarfile.open(filepath, 'r:gz') as tar:
55
+ tar.extractall('/home/app/uptime-kuma/')
56
+ print(f"Successfully restored backup from {latest_backup}")
57
+
58
+ except Exception as e:
59
+ print(f"Error downloading backup: {str(e)}")
60
+
61
+ if __name__ == "__main__":
62
+ action = sys.argv[1]
63
+ token = sys.argv[2]
64
+ repo_id = sys.argv[3]
65
+
66
+ if action == "upload":
67
+ file_path = sys.argv[4]
68
+ file_name = sys.argv[5]
69
+ upload_backup(file_path, file_name, token, repo_id)
70
+ elif action == "download":
71
+ download_latest_backup(token, repo_id)
72
+ EOL
73
+
74
+ # 首次启动时从HuggingFace下载最新备份
75
+ echo "Downloading latest backup from HuggingFace..."
76
+ python hf_sync.py download "${HF_TOKEN}" "${DATASET_ID}"
77
+
78
+ # 同步函数
79
+ sync_data() {
80
+ while true; do
81
+ echo "Starting sync process at $(date)"
82
+
83
+ # 确保数据目录存在
84
+ if [ -d "/home/app/uptime-kuma/data" ]; then
85
+ # 创建备份
86
+ cd /home/app/uptime-kuma
87
+ timestamp=$(date +%Y%m%d_%H%M%S)
88
+ backup_file="backup_${timestamp}.tar.gz"
89
+
90
+ # 压缩数据目录
91
+ tar -czf "/tmp/${backup_file}" data/
92
+
93
+ # 上传到HuggingFace
94
+ echo "Uploading backup to HuggingFace..."
95
+ python hf_sync.py upload "${HF_TOKEN}" "${DATASET_ID}" "/tmp/${backup_file}" "${backup_file}"
96
+
97
+ # 清理临时文件
98
+ rm -f "/tmp/${backup_file}"
99
+ else
100
+ echo "Data directory does not exist yet, waiting for next sync..."
101
+ fi
102
+
103
+ # 同步间隔
104
+ SYNC_INTERVAL=${SYNC_INTERVAL:-7200}
105
+ echo "Next sync in ${SYNC_INTERVAL} seconds..."
106
+ sleep $SYNC_INTERVAL
107
+ done
108
+ }
109
+
110
+ # 启动同步进程
111
+ sync_data &
112
+
113
+ # 启动主应用
114
+ exec node server/server.js