Spaces:
Paused
Paused
| # 检查环境变量 | |
| if [ -z "$HF_TOKEN" ] || [ -z "$DATASET_ID" ]; then | |
| echo "缺少必要的环境变量 HF_TOKEN 或 DATASET_ID" | |
| exit 1 | |
| fi | |
| # 上传/下载文件 | |
| cat > /tmp/hf_sync.py << 'EOL' | |
| from huggingface_hub import HfApi | |
| import sys | |
| import os | |
| def upload_backup(file_path, token, repo_id): | |
| api = HfApi(token=token) | |
| try: | |
| api.upload_file( | |
| path_or_fileobj=file_path, | |
| path_in_repo="webui.db", | |
| repo_id=repo_id, | |
| repo_type="dataset" | |
| ) | |
| print("成功上传 webui.db") | |
| except Exception as e: | |
| print(f"文件上传出错: {str(e)}") | |
| # 下载 webui.db 文件 | |
| def download_latest_backup(token, repo_id): | |
| try: | |
| api = HfApi(token=token) | |
| filepath = api.hf_hub_download( | |
| repo_id=repo_id, | |
| filename="webui.db", | |
| repo_type="dataset" | |
| ) | |
| if filepath and os.path.exists(filepath): | |
| os.makedirs('./data', exist_ok=True) | |
| os.system(f'cp "{filepath}" ./data/webui.db') | |
| print("成功从 HuggingFace 恢复 webui.db") | |
| except Exception as e: | |
| print(f"下载时出错: {str(e)}") | |
| if __name__ == "__main__": | |
| action = sys.argv[1] | |
| token = sys.argv[2] | |
| repo_id = sys.argv[3] | |
| if action == "upload": | |
| file_path = sys.argv[4] | |
| upload_backup(file_path, token, repo_id) | |
| elif action == "download": | |
| download_latest_backup(token, repo_id) | |
| EOL | |
| # 首次启动时下载 webui.db | |
| echo "正在从 HuggingFace 下载 webui.db..." | |
| python3 /tmp/hf_sync.py download "${HF_TOKEN}" "${DATASET_ID}" | |
| # 同步函数 | |
| sync_data() { | |
| while true; do | |
| echo "开始同步进程 $(date)" | |
| if [ -f "./data/webui.db" ]; then | |
| # 直接复制 webui.db 到临时目录 | |
| cp ./data/webui.db /tmp/webui.db | |
| echo "正在上传 webui.db 到 HuggingFace..." | |
| python3 /tmp/hf_sync.py upload "${HF_TOKEN}" "${DATASET_ID}" "/tmp/webui.db" | |
| rm -f /tmp/webui.db | |
| else | |
| echo "数据库文件不存在,等待下次同步..." | |
| fi | |
| SYNC_INTERVAL=${SYNC_INTERVAL:-7200} | |
| echo "下次同步将在 ${SYNC_INTERVAL} 秒后进行..." | |
| sleep $SYNC_INTERVAL | |
| done | |
| } | |
| # 后台启动同步进程 | |
| sync_data & |