#!/bin/sh # 检查环境变量 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 &