等待之前的shell脚本执行完成

等待之前的shell脚本执行完成

我需要每小时执行一次 shell 脚本。但是,在上一次运行完成之前,我不想开始下一次运行。

答案1

由于您将问题标记为 Linux,因此您可以使用flock锁定一个众所周知的文件:

flock "${TMPDIR:-/tmp}"/some_name.lock /path/to/your_command -options

该命令的第二个实例(以相同的方式运行)将等待第一个实例完成。这种方法的问题是,如果该命令经常需要一个多小时,您就会积累越来越多的实例等待锁定。

或者,如果第一个实例尚未完成,您可以跳过运行第二个实例:

flock -n "${TMPDIR:-/tmp}"/some_name.lock /path/to/your_command -options

这种方法的问题是您每天运行该命令的次数可能少于 24 次。

答案2

您需要更好地定义您的问题。

Sato 描述了一种新实例如何备份到延迟实例之后的方法。

Jaroslav 的解决方案仅提供了一种机制来检测前一个实例尚未完全完成。

另一种选择是在脚本本身内安排脚本的下一个实例:

at now + 1 hour $*

您需要定义前一个实例尚未完成时的行为,以及您是否希望实例每小时启动一次,还是在完成和启动之间的定义间隔内启动。

答案3

您可以在脚本启动时创建一些临时文件,并在脚本关闭之前将其删除。该脚本应检查该文件是否存在。如果它找到它,它就会关闭并且不执行任何操作。如果没有,请创建它并继续。

或者在 cron 作业中,您可以使用 pgrep 检查正在执行的脚本,只有在没有执行时才继续。

相关内容