- test/classroom.ts:45 个虚拟学生走一遍登录、运行、自测、提交,统计每个环节等多久 - 评分并发可配置(SIM_GRADE_CONCURRENCY,默认 16),提交队列同时评的份数跟着走; 2 核实测项目 8 任务 3 全班自测从约 4 分钟降到约 1.5 分钟 - 检查的默认等待 2 秒→5 秒,机器忙时不再误判正确的程序 - 删除学生时删除他的数据库(编号会重新用给新学生) - deploy/backup.sh、deploy/restore.sh:手动备份到宿主机 backups/,恢复前先备份 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
22 lines
1.1 KiB
Bash
Executable File
22 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# 在服务器上执行:备份平台的全部数据(账号、班级、学生作品、作业、提交、评阅,以及每个学生自己的数据库)
|
||
# 到 backups/<日期时间>/。备份在宿主机上,不在 Docker 数据卷里,数据卷被删也还在;要防硬盘坏,把它拷到别的机器上。
|
||
# 平台运行中也可以备份,学生不受影响。恢复见 deploy/restore.sh。
|
||
# 用法:deploy/backup.sh
|
||
set -euo pipefail
|
||
cd "$(dirname "$0")/.."
|
||
|
||
mkdir -p backups
|
||
name=$(date +%Y%m%d-%H%M%S)
|
||
# 同一秒里做了两次(如 restore.sh 恢复前先备份)时,等到下一秒,不和已有的备份重名
|
||
while [[ -e backups/$name ]]; do
|
||
sleep 1
|
||
name=$(date +%Y%m%d-%H%M%S)
|
||
done
|
||
inside=/data/.backup-$name
|
||
# 在容器里导出(SQLite 一致读取,不会备份出写了一半的库),再拷到宿主机
|
||
docker compose exec -T app bun server.js backup "$inside" >/dev/null
|
||
docker compose cp "app:$inside" "backups/$name" 2>/dev/null
|
||
docker compose exec -T app rm -rf "$inside"
|
||
echo "已备份到 $(pwd)/backups/$name($(du -sh "backups/$name" | cut -f1))"
|