在另一个终端使用它时,请防止其他终端运行脚本



我想在其他终端运行时,请防止其他终端运行某个脚本。任何帮助或提示都可以非常感谢!

例如:当该脚本在另一个终端上运行时,所有其他终端也将无法运行该脚本。并显示一条消息"在维护下"。

您可以使用" Lockfile"的概念。例如:

if [ -f ~/.mylock ]; then
    echo "UNDER MAINTENANCE"
    exit 1
fi
touch ~/.mylock
# ... the rest of your code
rm ~/.mylock

要变得更加豪华/更安全,您可以"捕获" EXIT信号在末尾自动删除它:

trap 'rm ~/.mylock' EXIT

使用flock并将其放在脚本上:

if ! flock -xn /path/to/lockfile ; then
    echo "script is already running."
    echo "Aborting."
    exit 1
fi

注意:path/to/lockfile可能是您脚本的路径。这样做会避免创建额外的文件。

为了避免种族条件,您可以将flock(1)与A一起使用锁定文件。有一个羊群(1)实施声称可以在Linux,BSD和OS X上工作。我还没有看过明确针对Unix。
这里有一些有趣的讨论。

更新:
我从这里找到了Randal L. Schwartz的一种非常聪明的方式。我真的很喜欢这一个。它依赖于flock(1)bash,并将脚本本身用作自己的锁紧file。检查一下:

/usr/local/bin/onlyOne是获得锁的脚本

#!/bin/bash
exec 200< $0
if ! flock -n 200; then
    echo "there can be only one"
    exit 1
fi

然后myscript使用onlyOne获得锁(或不):

#!/bin/bash
source /usr/local/bin/onlyOne
# The real work goes here.
echo "${BASHPID} working"
sleep 120

相关内容

  • 没有找到相关文章

最新更新