API / start.sh
lukuan2026's picture
Upload start.sh
cb05d4b verified
#!/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