Spaces:
Sleeping
Sleeping
| # 设置端口 (HF 必须监听 7860) | |
| export PORT=7860 | |
| DB_PATH="/data/one-api.db" | |
| echo "=== 启动环境检查 ===" | |
| # 1. 检查并下载数据库 | |
| if [ -n "$DATASET_REPO" ] && [ -n "$HF_TOKEN" ]; then | |
| echo "正在从 Dataset: $DATASET_REPO 下载数据库..." | |
| python3 -c " | |
| import os | |
| from huggingface_hub import hf_hub_download | |
| try: | |
| hf_hub_download( | |
| repo_id=os.environ['DATASET_REPO'], | |
| filename='one-api.db', | |
| local_dir='/data', | |
| repo_type='dataset', | |
| token=os.environ['HF_TOKEN'] | |
| ) | |
| print('数据库下载成功') | |
| except Exception as e: | |
| print(f'提示:暂无历史数据库备份,将初始化新数据库。') | |
| " | |
| else | |
| echo "警告:未设置 DATASET_REPO 或 HF_TOKEN,数据将无法持久化!" | |
| fi | |
| # 2. 自动查找可执行文件 | |
| # 尝试查找名为 new-api 或 one-api 的程序 | |
| TARGET_BIN=$(which new-api || which one-api || find / -name "new-api" -executable -type f 2>/dev/null | head -n 1 || find / -name "one-api" -executable -type f 2>/dev/null | head -n 1) | |
| if [ -z "$TARGET_BIN" ]; then | |
| echo "错误:找不到可执行程序 (new-api 或 one-api)!" | |
| exit 1 | |
| fi | |
| echo "找到程序路径: $TARGET_BIN" | |
| # 3. 定义上传备份函数 | |
| upload_db() { | |
| if [ -f "$DB_PATH" ]; then | |
| echo "正在备份数据库到 HF Dataset..." | |
| python3 -c " | |
| import os | |
| from huggingface_hub import HfApi | |
| api = HfApi() | |
| try: | |
| api.upload_file( | |
| path_or_fileobj='$DB_PATH', | |
| path_in_repo='one-api.db', | |
| repo_id=os.environ['DATASET_REPO'], | |
| repo_type='dataset', | |
| token=os.environ['HF_TOKEN'] | |
| ) | |
| print('备份成功') | |
| except Exception as e: | |
| print(f'备份失败: {e}') | |
| " | |
| fi | |
| } | |
| # 4. 后台定时同步 (每 15 分钟) | |
| ( | |
| while true; do | |
| sleep 900 | |
| upload_db | |
| done | |
| ) & | |
| # 5. 捕捉退出信号 | |
| trap upload_db EXIT | |
| # 6. 运行主程序 | |
| echo "=== 正在启动 New-API ===" | |
| exec $TARGET_BIN |