openweb / sync_data.sh
JurgenPine1985's picture
Upload 3 files
65291e3 verified
#!/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 &