diff --git a/backup/README.md b/backup/README.md index 1f89d73..a58a40e 100644 --- a/backup/README.md +++ b/backup/README.md @@ -36,14 +36,14 @@ backup/ ```bash # 创建目录并下载脚本与示例配置 -mkdir -p ~/backup && cd ~/backup +mkdir -p /opt/backup && cd /opt/backup curl -fsSL -o backup.sh https://git.suhang.me/suhang/scripts/raw/branch/release/backup/backup.sh curl -fsSL -o backup.conf https://git.suhang.me/suhang/scripts/raw/branch/release/backup/backup.conf chmod +x backup.sh chmod 600 backup.conf # 编辑 backup.conf 后执行 -bash backup.sh smb +bash /opt/backup/backup.sh smb ``` 也可改用 `wget`: @@ -224,24 +224,52 @@ rclone lsd gdrive: # 验证可访问 ```cron # 每天 03:10 跑一次 -10 3 * * * /bin/bash /path/to/backup/backup.sh smb > /var/log/backup.log 2>&1 +10 3 * * * /bin/bash /opt/backup/backup.sh smb > /opt/backup/backup.log 2>&1 # 每天 03:17 跑一次 -17 3 * * * /bin/bash /path/to/backup/backup.sh smb > /var/log/backup.log 2>&1 +17 3 * * * /bin/bash /opt/backup/backup.sh smb > /opt/backup/backup.log 2>&1 # 每两天 03:10 跑一次(按月内的奇数日触发:1、3、5……29、31) -10 3 */2 * * /bin/bash /path/to/backup/backup.sh smb > /var/log/backup.log 2>&1 +10 3 */2 * * /bin/bash /opt/backup/backup.sh smb > /opt/backup/backup.log 2>&1 # 每 5 天 03:10 跑一次(按月内日期号取模:1、6、11、16、21、26、31) -10 3 */5 * * /bin/bash /path/to/backup/backup.sh smb > /var/log/backup.log 2>&1 +10 3 */5 * * /bin/bash /opt/backup/backup.sh smb > /opt/backup/backup.log 2>&1 ``` > `*/N` 是按月内日期号取模,并不是严格意义的「每 N×24 小时」。月末跨月时会出现间隔被截短的情况(例如 `*/5` 在 31 号触发后,次月 1 号又会触发);如对间隔严格要求,建议改用 systemd timer 的 `OnUnitActiveSec=5d`。 -> 如果有多条任务都写到同一个日志文件,请改用不同的日志路径(例如 `/var/log/backup-0310.log`、`/var/log/backup-0317.log`),否则后一次会覆盖前一次。 +> 如果有多条任务都写到同一个日志文件,请改用不同的日志路径(例如 `/opt/backup/backup-0310.log`、`/opt/backup/backup-0317.log`),否则后一次会覆盖前一次。 macOS 可用 `launchd` 或 `cron`(需要在「系统设置 → 隐私与安全性 → 完全磁盘访问权限」中授予 `cron` 权限以读取受保护目录)。 +### 立即执行一次验证 + +写完 cron 后建议先手动跑一遍验证,避免等到凌晨才发现配置问题(密码、网络、目录权限等)。 + +**方法 A**:直接照搬 cron 那行命令在终端跑一次,看日志是否完整: + +```bash +/bin/bash /opt/backup/backup.sh smb > /opt/backup/backup.log 2>&1 +tail -n 80 /opt/backup/backup.log +``` + +**方法 B**:用 cron 自身的环境跑一次(更接近真实定时执行的环境,能复现 PATH / 语言区域等差异)。临时把 cron 改成「下一分钟」触发: + +```bash +# 假设当前时间 21:34,把 cron 改成 21:35 跑一次 +crontab -e +# 临时改成: 35 21 * * * /bin/bash /opt/backup/backup.sh smb > /opt/backup/backup.log 2>&1 +# 等一分钟后: +tail -f /opt/backup/backup.log +# 验证通过后再 crontab -e 恢复成原计划(例如 10 3 * * *) +``` + +**方法 C**(最干脆):debug 模式直接前台跑,进度全在终端: + +```bash +bash /opt/backup/backup.sh smb --debug +``` + ## 远端目录结构 每次备份在远端创建一个独立子目录(SMB 与 rclone 行为一致),内含分卷文件与 SHA256 清单: