如何检查脚本是否正在运行并暂停,直到该实例完成再次运行?

如何检查脚本是否正在运行并暂停,直到该实例完成再次运行?

因此,我们运行这个脚本,将数据添加到文件中,我尝试添加一些内容来检查脚本是否已经在运行。如果是这样,那么我希望它暂停并在 20 秒内再次检查并重复该操作,直到发现它没有运行。此时,我希望它继续执行脚本的其余部分。所以我需要知道如何让它继续检查,直到可以继续。有人有主意吗?

    if [ `ps -ef| grep $script_name_with_arguments | wc -l ` -gt 1 ]
    then
      echo "already running"
      sleep 20s
    else
      echo "ok"
    fi
}```

答案1

您使用某种锁定。

最简单的方法是锁定文件。有一些软件包可以为您管理这些内容;你没有说你的平台或发行版是什么,所以我不能非常精确,但其中之一是程序procmail附带的软件包lockfile

您可以在脚本中使用它,如下所示:

LOCK=/run/npaulsen/mylockfile.lock
lockfile -20 $LOCK
run_the_fscking_rest_of_my_script
rm -f $LOCK

您可以进行一些改进,以避免在一个实例崩溃时无限期地卡住。您可以阅读有关该内容的联机帮助页:man 1 lockfile。或者您可以实现您自己的 - 这很简单,但您需要一种真正的编程语言(而不是 shell 脚本)。

另一个更复杂(但也更复杂)的想法是使用 POSIX 信号量;尝试man 7 sem_overview

相关内容