Bash:执行外部脚本时如何锁定

时间:2012-11-25 16:57:10

标签: bash flock

这是我的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导致进程在无法获得锁定时退出,但据我所知,它只是等到它可以运行。我错过了什么?

1 个答案:

答案 0 :(得分:7)

你的问题可能相当普通。即,

false || ( exit 1 )

不会导致脚本退出。而是,退出指示子shell退出。所以将你的第一行改为:

flock -n -e 200 || { echo "This script is currently being run"; exit 1; } >&2