Bash:Global(在执行的脚本之间共享)ref计数器/堆栈实现
我正在为我的RPi创建备份脚本,每个脚本都可以按不同的时间表执行(例如,不经常更改的内容每月备份一次,经常更改的文件每周备份一次)Bash:Global(在执行的脚本之间共享)ref计数器/堆栈实现,bash,backup,Bash,Backup,我正在为我的RPi创建备份脚本,每个脚本都可以按不同的时间表执行(例如,不经常更改的内容每月备份一次,经常更改的文件每周备份一次) 每个备份脚本包括: 确保已安装备份驱动器 复制文件/转储/。。。备份程序 umount备份设备 备份驱动器仅在备份完成时安装(以防止意外事故;设备仍处于物理连接状态) 很明显,这种方法包含了巨大的竞争条件:脚本A和B可能同时启动,但其中一个会更早地调用unmount(可能是运气不好,因为此时设备没有使用,因此无法装载) 由于我不擅长攻击,我的直接想法是:
- 每个备份脚本包括:
- 确保已安装备份驱动器
- 复制文件/转储/。。。备份程序
- umount备份设备
- 备份驱动器仅在备份完成时安装(以防止意外事故;设备仍处于物理连接状态)
unmount
(可能是运气不好,因为此时设备没有使用,因此无法装载)
由于我不擅长攻击,我的直接想法是:
- env变量对我不起作用(1.读取/递增/写入不是原子的,2.甚至不确定设置env var是否会立即影响其他已运行的进程)
- 保留文件
,它将包含一个整数值,指示需要安装多少备份脚本备份。计数器
- 当备份脚本进入结束阶段时,它将从计数器中减去一-
仅当剩余值为umount
0
- 如果最终值为
,则文件0
也将被删除backup.counter
- 如果文件不存在,则值
为1
- 当备份脚本进入结束阶段时,它将从计数器中减去一-
- 拥有
文件,该文件将锁定对backup.lock
的访问,因为读取、更新和存储新值不是原子的backup.counter
检查flock
是否已锁定(访问/离开备份脚本)backup.lock
- 在bash中实现引用计数器有更好/更简单的方法吗
- 有没有更好的方法来处理具有不同时间表和使用相同资源的备份?(基于Debian)
如果我所有的备份想法都是愚蠢的,请告诉我!然而,我仍然对解决方案感兴趣,我真的很好奇