如何在UNIX中为Shell脚本锁定目录

时间:2019-04-06 06:05:25

标签: bash unix

我需要根据以下条件删除目录D的内容

  1. 获取目录D的已用空间。
  2. 如果已用空间超出阈值,则根据上次修改时间(使用find mtime)删除目录的内容

已经为其编写了一个shell脚本(clearSpace.sh),但是问题在于该脚本可以同时被多个进程调用。

我希望第1步和第2步是原子的,以便获得一致的结果。

有没有一种方法,我首先在目录D上获得一个“锁”,然后执行clearSpace.sh然后给出该锁?不允许基于权限的锁定

1 个答案:

答案 0 :(得分:0)

我们建议不要锁定存储或任何其他操作系统资源。副作用可能是毁灭性的。和无关。

操作系统的职责是同步,分配和管理资源。

资源锁定是内核级编程。最好不要去那里。操作系统脚本工具中没有锁定功能是有原因的。

您可以实现脚本访问锁定。使用lock.id文件来指示脚本正在运行。

如果存在lock.id,则禁止脚本运行。

并在脚本操作完成后删除lock.id文件。 我们建议您更改脚本阈值以更加灵活和宽容。