Repository navigation
Data Storage
dxx114514-stack edited this page Oct 1, 2026
·
2 revisions
- 环境变量
CLIJUDGE_DATA_DIR指定的目录(最高优先级) - 否则为可执行文件同级的
data/
备份数据 = 拷贝整个目录(纯 JSON,无数据库)。
data/
├── config.json # current_lang + "judge" 评测设置
├── .clijudge.lock # 跨进程修改锁(运行期自动创建)
├── langs/*.cjl # 本地显示语言包(JSON)
├── problems/problem_N.json + problems.json # 题目文件 + 题目索引
├── articles/article_N.json + articles.json # 文章文件 + 文章索引
├── contests/contest_N.json + contests.json + contest_N_problem_M_submissions.json
└── submissions/submissions.json
自动迁移:旧版平铺在 data/ 根下的文件会在启动时自动迁移到对应子目录(幂等,顶层保留 config.json 与 langs/)。
{
"current_lang": "en",
"judge": {
"compile_time_limit_ms": 10000,
"max_judging_threads": 4,
"custom_languages": { }
}
}-
judge段全部键与默认值见 评测机制 · 评测设置 -
custom_languages见 自定义评测语言 -
current_lang见 显示语言 -
解析失败不再静默回退:启动时输出
Warning: failed to parse ...config.json (…); using defaults.并继续使用默认值
-
原子写:题目/比赛/文章/提交索引与
config.json写入 = 临时文件(*.tmp.<pid>)+rename原子替换,进程崩溃不会损坏已有数据;例外:.cjl语言包与首装内置包用普通writeFile(非原子) -
跨进程锁:
data/.clijudge.lock— 修改类命令(建题/编辑/删除/导入/提交/rejudge/比赛操作/语言切换等)启动时排他持锁,读命令不加锁(读到的永远是完整快照);例外:problem testdata子命令(含list)按粗粒度归为修改类、实际会加锁;Windows 用LockFileEx,Linux 用flock,进程崩溃后锁自动释放,无需手工清理 - 并发修改同一数据目录时,后到的修改命令会阻塞等待前一个完成
| 内容 | 导出 | 导入 |
|---|---|---|
| 题目 |
problem export 1 p.zip / p.json
|
problem import p.zip|p.json |
| 测试数据 | problem testdata 1 -zip t.zip |
problem testdata 1 -zip t.zip(追加) |
| 比赛 | contest export 1 c.cdf |
contest import c.cdf |
- 题目 zip/json 与 NoldOJ
version格式互通;CDF 为 LemonLime 兼容格式 - 携带 SPJ/交互器/生成器/grader 的包导入时会输出信任告警(见 沙箱与安全)
- 导入时重新分配编号,规则为
max(现有编号) + 1——不复用删除留下的空闲编号(删除 2 号后再导入得到 4 号)
返回 Home