3

这是我的 bash 代码:

(
flock -n -e 200 || (echo "This script is currently being run" && exit 1)
    sleep 10

    ...Call some functions which is written in another script...

    sleep 5

) 200>/tmp/blah.lockfile

我连续从两个 shell 运行脚本,只要第一个处于“sleep 5”,一切正常,这意味着另一个没有启动。但是,当第一个轮到从另一个脚本(其他文件)执行代码时,第二个运行开始执行。

所以我在这里有两个问题:

  1. 我应该怎么做才能防止该脚本及其所有“子代”在脚本或其“子代”仍在运行时运行。(除了“孩子”之外,我没有找到更合适的表达方式来运行另一个脚本,对此感到抱歉:))。

  2. 根据手册页, -n 导致进程在未能获得锁定时退出,但据我所知,它只是等到它可以运行。我错过了什么?

4

1 回答 1

7

你的问题可能很普通。即,

false || ( exit 1 )

不会导致脚本退出。相反,exit 指示子shell 退出。因此,将您的第一行更改为:

flock -n -e 200 || { echo "This script is currently being run"; exit 1; } >&2
于 2012-11-25T17:31:33.490 回答