Bash:Global(在执行的脚本之间共享)ref计数器/堆栈实现

Bash:Global(在执行的脚本之间共享)ref计数器/堆栈实现,bash,backup,Bash,Backup,我正在为我的RPi创建备份脚本,每个脚本都可以按不同的时间表执行(例如,不经常更改的内容每月备份一次,经常更改的文件每周备份一次) 每个备份脚本包括: 确保已安装备份驱动器 复制文件/转储/。。。备份程序 umount备份设备 备份驱动器仅在备份完成时安装(以防止意外事故;设备仍处于物理连接状态) 很明显,这种方法包含了巨大的竞争条件:脚本A和B可能同时启动,但其中一个会更早地调用unmount(可能是运气不好,因为此时设备没有使用,因此无法装载) 由于我不擅长攻击,我的直接想法是:

我正在为我的RPi创建备份脚本,每个脚本都可以按不同的时间表执行(例如,不经常更改的内容每月备份一次,经常更改的文件每周备份一次)

  • 每个备份脚本包括:
    • 确保已安装备份驱动器
    • 复制文件/转储/。。。备份程序
    • umount备份设备
  • 备份驱动器仅在备份完成时安装(以防止意外事故;设备仍处于物理连接状态)
很明显,这种方法包含了巨大的竞争条件:脚本A和B可能同时启动,但其中一个会更早地调用
unmount
(可能是运气不好,因为此时设备没有使用,因此无法装载)

由于我不擅长攻击,我的直接想法是:

  • env变量对我不起作用(1.读取/递增/写入不是原子的,2.甚至不确定设置env var是否会立即影响其他已运行的进程)
  • 保留文件
    备份。计数器
    ,它将包含一个整数值,指示需要安装多少备份脚本
    • 当备份脚本进入结束阶段时,它将从计数器中减去一-
      umount
      仅当剩余值为
      0
    • 如果最终值为
      0
      ,则文件
      backup.counter
      也将被删除
    • 如果文件不存在,则值
      1
  • 拥有
    backup.lock
    文件,该文件将锁定对
    backup.counter
    的访问,因为读取、更新和存储新值不是原子的
  • flock
    检查
    backup.lock
    是否已锁定(访问/离开备份脚本)
问题
  • 在bash中实现引用计数器有更好/更简单的方法吗
  • 有没有更好的方法来处理具有不同时间表和使用相同资源的备份?(基于Debian)

如果我所有的备份想法都是愚蠢的,请告诉我!然而,我仍然对解决方案感兴趣,我真的很好奇