2026-03-11 23:23:40 +08:00
2026-03-11 23:23:40 +08:00
2026-03-11 23:23:40 +08:00
2026-03-11 23:23:40 +08:00
2026-03-11 23:23:40 +08:00

uploader

一个常驻扫描器:定期扫描目录中的 .json 文件,并以 multipart/form-data 方式上传到一个或多个 HTTP 接口;上传成功/跳过/失败会写入本地 SQLite 状态库,避免重复上传。

运行环境

  • Python 3.9+(建议 3.10/3.11
  • 依赖见 requirements.txt

快速开始(本地)

cd /opt/uploader
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt

# 运行(示例)
./.venv/bin/python uploader.py --dir /opt/uploader --interval 360

配置(环境变量 / .env

脚本会在启动时尝试加载当前工作目录下的 .env(需要安装了 python-dotenv)。

建议在 /opt/uploader/.env 配置:

# 鉴权 token必填
UPLOAD_TOKEN=your_token_here

# 上传接口列表(推荐用 ; 或 , 分隔;不要用 ':' 分隔)
# 示例使用本机地址;请按你的实际服务地址修改
UPLOAD_ENDPOINTS=http://127.0.0.1:8317/v0/management/auth-files;http://127.0.0.1:46344/v0/management/auth-files

# JSON 子目录(可选):从这些目录递归扫描 *.json
# 注意:该变量支持 os.pathsep 分隔Linux 为 ':'Windows 为 ';'),也支持逗号
UPLOAD_JSON_SUBDIR=/usr/local/openai_register/tokens
# 或多个UPLOAD_JSON_SUBDIRS=/path/a:/path/b

# 默认 endpoint当未设置 UPLOAD_ENDPOINTS 且未传 --endpoint 时使用)
UPLOAD_ENDPOINT=http://127.0.0.1:8317/v0/management/auth-files

# 默认 SQLite DB 文件名(当未传 --db 时使用)
UPLOAD_DB=upload_state.sqlite3

环境变量说明

  • UPLOAD_TOKEN:上传鉴权 token支持 Bearer xxx 或直接 token
  • UPLOAD_ENDPOINTS:多个上传接口 URL;, 分隔(不要用 : 分隔,因为 URL 自己包含 http:// 和端口)
  • UPLOAD_ENDPOINT:默认接口 URL兜底用
  • UPLOAD_DB:默认 SQLite 状态库文件名(兜底用)
  • UPLOAD_JSON_SUBDIRS / UPLOAD_JSON_SUBDIR:扫描子目录(可选;不设置则扫描 --dir 本身)

命令行参数

./.venv/bin/python uploader.py \
  --dir /opt/uploader \
  --interval 360 \
  --endpoint http://XXX:8317/v0/management/auth-files \
  --db upload_state.sqlite3 \
  --timeout 60 \
  --once

常用参数:

  • --dir:工作目录
  • --interval:扫描间隔(秒)
  • --endpoint:当未配置 UPLOAD_ENDPOINTS 时使用的单个 endpoint
  • --dbSQLite 文件名/路径
  • --once:只跑一轮就退出

Linux 部署systemd 推荐)

1) 放置项目

mkdir -p /opt/uploader
# 将 uploader.py、requirements.txt、.env 放到 /opt/uploader

2) 安装依赖

cd /opt/uploader
python3 -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -r requirements.txt

3) 创建 systemd 服务

创建 /etc/systemd/system/uploader.service

[Unit]
Description=uploader daemon
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/uploader
ExecStart=/opt/uploader/.venv/bin/python /opt/uploader/uploader.py --dir /opt/uploader --interval 360
Restart=always
RestartSec=3
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=multi-user.target

启用并启动:

systemctl daemon-reload
systemctl enable --now uploader
systemctl status uploader

实时看日志

方式 A直接看 systemd 日志(推荐)

journalctl -u uploader -f -o cat

方式 B输出到文件再 tail

uploader.service[Service] 增加:

StandardOutput=append:/var/log/uploader/uploader.log
StandardError=append:/var/log/uploader/uploader.err.log

并创建目录(如果服务用非 root 用户运行,请确保有写权限):

mkdir -p /var/log/uploader
# 如果 service 里设置了 User=uploader
# chown -R uploader:uploader /var/log/uploader

systemctl daemon-reload
systemctl restart uploader

tail -n 200 -f /var/log/uploader/uploader.log
Description
No description provided
Readme 35 KiB
Languages
Python 100%