配置¶
这一页按“你想实现什么效果”来讲配置,而不是把所有字段生硬列成字典。
默认配置文件路径:
config/mcdr2restic/config.yml
先看一眼完整结构¶
当前配置大致长这样:
enabled: true
language: zh_cn
command:
root: "!!restic"
aliases:
- "!!m2r"
permission_level: 3
schedule: {}
force_schedule: {}
maintenance_schedule: {}
update_check: {}
minecraft: {}
restic: {}
onebot: {}
discord: {}
notification: {}
snapshot_cache: {}
restore: {}
messages: {}
config_version: 10
1. 总开关和命令入口¶
总开关¶
enabled: true
true:允许调度继续工作false:关闭后续定时备份
如果你习惯用命令控制,也可以直接执行 !!restic start 和 !!restic stop。
命令入口¶
command:
root: "!!restic"
aliases:
- "!!m2r"
permission_level: 3
root:主命令根节点aliases:命令别名permission_level:执行命令所需的 MCDR 权限等级
如果你把 root 改成 !!backup,那命令就会变成 !!backup status、!!backup reload 之类。
2. 正常定时备份¶
什么时候该改 schedule¶
当你希望“平时自动备份,但尽量只在有人活动时才备份”时,用这一段。
schedule:
interval_seconds: 0
cron_expression: "0 0 0,3,6,9,12,15,18,21 * * *"
require_player_activity_in_wait_period: true
online_check_command: "list"
规则是:
interval_seconds > 0时,优先按固定间隔运行interval_seconds = 0时,使用 6 位 cronrequire_player_activity_in_wait_period = true时,会结合玩家活动决定这次要不要备份
玩家活动感知的判断逻辑:
- 本周期有人加入:备份
- 没人加入,但触发时检查到有人在线:备份
- 没人加入,但本周期有人退出:备份
- 没人加入、没人退出、触发时也没人在线:跳过
常用示例:只有玩家活跃时才做正常备份¶
schedule:
interval_seconds: 0
cron_expression: "0 0 */6 * * *" # 每 6 小时检查一次
require_player_activity_in_wait_period: true
online_check_command: "list"
常用示例:完全按时间走,不看玩家活动¶
schedule:
interval_seconds: 7200 # 每 2 小时一次
cron_expression: "0 0 0,3,6,9,12,15,18,21 * * *"
require_player_activity_in_wait_period: false
online_check_command: "list"
说明:
- 这里虽然保留了
cron_expression,但真正生效的是interval_seconds: 7200 online_check_command默认是list
重要提醒¶
- 正常调度的
cron_expression不建议留空 - 它不是维护调度,留空不会自动变成默认时间
3. 强制备份调度¶
它和正常调度有什么区别¶
force_schedule 不看玩家活动。只要到点,就直接启动备份。
force_schedule:
interval_seconds: 0
cron_expression: "0"
默认是关闭状态。
常用示例:每天凌晨强制留一份¶
force_schedule:
interval_seconds: 0
cron_expression: "0 30 4 * * *" # 每天 04:30 强制备份
关闭方式¶
推荐明确写成:
force_schedule:
interval_seconds: 0
cron_expression: "0"
4. 独立维护调度¶
这不是“备份前步骤”¶
维护是完全独立的流程。它不会自动插进每次备份前面。
maintenance_schedule:
interval_seconds: 0
cron_expression: "0 0 3 * * *"
关键行为:
- 留空表示默认每天
03:00 - 写成
"0"表示关闭 - 如果和备份同一时刻触发,先备份
- 维护不会执行 Minecraft 的
save-off、save-all、save-on
常用示例:每天凌晨 3 点维护¶
maintenance_schedule:
interval_seconds: 0
cron_expression: "0 0 3 * * *"
常用示例:禁用自动维护,只保留手动维护¶
maintenance_schedule:
interval_seconds: 0
cron_expression: "0"
5. Minecraft 保存命令¶
备份开始前,插件会调用这里的命令。
minecraft:
save_off_command: "save-off"
save_all_command: "save-all flush"
save_on_command: "save-on"
wait_after_save_off_seconds: 2
wait_after_save_all_seconds: 10
wait_after_save_on_seconds: 1
说明:
- Java 版常见配置是
save-all flush - 如果你的服务端不支持
flush,可改成save-all - 维护流程不会使用这些命令
6. restic 核心配置¶
这一段最重要,决定你到底备份什么、备份到哪里、怎么认证。
最小本地仓库示例¶
restic:
executable: "./config/mcdr2restic/restic" # Windows 可改为 '.\config\mcdr2restic\restic.exe'
working_directory: ""
repository: "./restic-repo"
password: "请改成你自己的强密码"
password_file: ""
auto_download: true
download_version: "latest"
download_proxy_prefixes:
- "https://gh.llkk.cc/"
- "https://gh-proxy.com/"
- "https://hub.gitmirror.com/"
download_timeout_seconds: 120
auto_init_local_repository: true
environment: {}
maintenance_commands:
- ["forget", "--keep-daily", "7", "--prune"]
backup_command:
- "backup"
- "./server/world"
- "--tag"
- "minecraft"
- "--host"
- "mcdr2Restic"
timeout_seconds: 0
progress_interval_seconds: 5
executable¶
推荐直接保留默认值。
这样做的好处:
- 插件更容易自动下载
restic - Windows / Linux 的默认路径都已经考虑好了
working_directory¶
- 留空:继承 MCDR 当前工作目录
- 不留空:按你填写的目录作为
restic工作目录
如果你不确定,第一次通常保持空字符串最稳妥。
repository¶
仓库路径或仓库地址。
本地示例:
repository: "./restic-repo"
远端示例:
repository: "s3:s3.example.com/my-minecraft-backup"
password 和 password_file¶
优先级是:
passwordpassword_file
也就是说,只要 password 不是空字符串,就优先用它。
如果你想改用密码文件:
restic:
password: ""
password_file: "./config/mcdr2restic/restic-password.txt"
auto_download¶
只有在你使用默认可执行文件路径族时,自动下载才有意义。它主要用于默认路径下缺少 restic 的场景。
当前适用范围:
- Linux amd64
- Windows amd64
auto_init_local_repository¶
auto_init_local_repository: true
含义:
- 本地仓库不存在,或缺少
config文件时,插件会自动执行restic init - 远端仓库不会自动初始化
environment¶
适合放远端仓库需要的环境变量,例如 S3、B2 等。
示例:
restic:
repository: "s3:https://s3.example.com/my-backup"
password: ""
password_file: "./config/mcdr2restic/restic-password.txt"
environment:
AWS_ACCESS_KEY_ID: "改成你自己的 Access Key"
AWS_SECRET_ACCESS_KEY: "改成你自己的 Secret Key"
AWS_DEFAULT_REGION: "ap-east-1"
注意:
- 不需要在这里重复写
RESTIC_REPOSITORY - 不需要在这里重复写
RESTIC_PASSWORD - 如果某个环境变量值写成
null,插件会尝试移除继承来的同名变量
maintenance_commands¶
这一段就是维护时真正执行的 restic 命令列表。
常见示例:
maintenance_commands:
- ["forget", "--keep-daily", "7", "--prune"]
backup_command¶
这是最容易改错的一段,因为它直接决定“备份什么”。
最简单示例:
backup_command:
- "backup"
- "./server/world"
- "--tag"
- "minecraft"
- "--host"
- "mcdr2Restic"
如果你想备份多个目录:
backup_command:
- "backup"
- "./server/world"
- "./server/world_nether"
- "./server/world_the_end"
- "--tag"
- "minecraft"
- "--host"
- "mcdr2Restic"
timeout_seconds¶
0表示不限制- 大于
0表示整个restic命令流程允许占用的总时间
progress_interval_seconds¶
控制 backup / restore --json 进度在日志中的回显间隔。默认每 5 秒输出一条进度。
高级:成功码和错误判定¶
success_exit_codes:
- 0
error_regexes:
- '(?i)^fatal:'
ignore_error_regexes:
- '(?i)errors?:\s*0\b'
max_output_chars_in_notification: 1800
适合什么时候改:
- 你很清楚自己在做什么
- 你需要对某些特殊输出重新判定成功或失败
普通用户建议保持默认。
7. 通知配置¶
OneBot QQ 最小示例¶
onebot:
enabled: true
ws_url: "ws://127.0.0.1:8777"
access_token: "改成你的令牌,没有就留空"
use_header_auth: false
admin_qqs:
- 123456789
message_prefix: "[MCDR2Restic]"
connect_timeout_seconds: 10
send_timeout_seconds: 10
reconnect_interval_seconds: 5
Discord Webhook 最小示例¶
discord:
enabled: true
webhook_url: "改成你的 Discord Webhook URL"
username: "MCDR2Restic"
avatar_url: ""
message_prefix: "[MCDR2Restic]"
mention_user_ids: []
mention_role_ids: []
mention_everyone: false
send_timeout_seconds: 10
控制哪些阶段发通知¶
notification:
notify_on_start: true
notify_on_success: true
notify_on_failure: true
notify_on_skip: false
8. 快照缓存¶
status 命令里的快照列表依赖这段配置。
snapshot_cache:
enabled: true
page_size: 10
query_timeout_seconds: 30
database: "snapshots.sqlite3"
说明:
- 默认每页 10 条
- 首次刷新或缓存失效后,状态查询会重新调用
restic snapshots --json - 数据库存放在插件配置目录下
9. 恢复配置¶
restore:
pre_restore_backup_tag: "mcdr2restic-pre-restore"
stop_timeout_seconds: 120
start_timeout_seconds: 120
最重要的是:
restore apply开始前会自动做一份保护快照- 这份保护快照会带上
pre_restore_backup_tag - 如果恢复阶段失败,插件会尝试回滚到这份保护快照
恢复到指定目录的行为见状态与恢复,它不依赖这里的停服超时配置。
10. 自定义通知文本¶
你可以改 messages 里的模板。
可用变量:
{prefix}{label}{start_time}{end_time}{duration_seconds}{status}{message}{detail}{error}
示例:
messages:
backup_start: |-
{prefix} 备份开始
触发来源:{label}
开始时间:{start_time}
backup_success: |-
{prefix} 备份完成
触发来源:{label}
耗时:{duration_seconds} 秒
结束时间:{end_time}
backup_failure: |-
{prefix} 备份失败
触发来源:{label}
状态:{status}
详情:{detail}
如果你想输出字面量的大括号,请写成 {{ 和 }}。
11. 更新检查¶
update_check:
enabled: true
check_on_startup: true
daily_time: "00:00"
api_url: "https://api.github.com/repos/pfdr2333/MCDR2restic/releases/latest"
release_page_url: "https://github.com/pfdr2333/MCDR2restic/releases/latest"
proxy_prefixes:
- "https://gh.llkk.cc/"
- "https://gh-proxy.com/"
- "https://hub.gitmirror.com/"
timeout_seconds: 10
它只会检查和提示,不会自动更新插件。
12. 几组可直接参考的配置片段¶
只保留正常备份,不要强制备份¶
force_schedule:
interval_seconds: 0
cron_expression: "0"
普通备份和强制备份并存¶
schedule:
interval_seconds: 0
cron_expression: "0 0 */6 * * *"
require_player_activity_in_wait_period: true
online_check_command: "list"
force_schedule:
interval_seconds: 0
cron_expression: "0 0 4 * * *"
说明:
- 平时每 6 小时检查一次,有玩家活动才备份
- 每天 04:00 再强制补一份,不看玩家活动
单独做维护,不自动强制备份¶
force_schedule:
interval_seconds: 0
cron_expression: "0"
maintenance_schedule:
interval_seconds: 0
cron_expression: "0 0 3 * * *"
restic:
maintenance_commands:
- ["forget", "--keep-daily", "7", "--prune"]
13. 配置迁移和备份文件¶
配置版本升级时,插件可能会迁移你的 config.yml。
你可能看到这些文件:
config.yml:当前配置config.yml.v8.bak:旧版本配置备份,文件名里的数字会因原版本而变化config.yml.temp:迁移中的临时文件,正常成功后不会留下
如果配置损坏,插件会快速失败,而不是把你原来的配置静默重写掉。