如何在Unix中为shell脚本锁定目录[重复]

Posted

技术标签:

【中文标题】如何在Unix中为shell脚本锁定目录[重复]【英文标题】:How to lock a directory in unix for the shell script [duplicate] 【发布时间】:2019-08-28 00:07:39 【问题描述】:

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

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

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

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

有没有办法让我首先在目录 D 上获得“锁定”并执行 clearSpace.sh 然后给锁定?基于权限的锁定不是一种选择

【问题讨论】:

您可以使用lock file. 【参考方案1】:

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

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

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

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

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

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

【讨论】:

以上是关于如何在Unix中为shell脚本锁定目录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Unix中使用shell脚本删除超过10天的文件[重复]

Unix shell script 找出脚本文件所在的目录?

在 Unix shell 脚本中设置退出代码

在C语言中调用Unix Shell脚本。

如何在 Ruby 脚本中为命令 shell 获取环境变量?

用于在远程系统上归档文件的 Unix shell 脚本