File size: 1,953 Bytes
cb05d4b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/bash

# 设置端口 (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