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--db:SQLite 文件名/路径--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
Languages
Python
100%