阻止其他终端在另一个终端使用脚本时 运行
Prevent other terminals from running a script while another terminal is using it
我想阻止其他终端在另一个终端 运行 宁时 运行 宁某个脚本但是在 bash 但我不太确定我会怎么做能够去做。非常感谢任何帮助或提示!
例如:
当该脚本在另一个终端上 运行 时,所有其他终端也将无法 运行 该特定脚本。并显示消息 "UNDER MAINTENANCE".
你可以使用一个"lockfile."的概念例如:
if [ -f ~/.mylock ]; then
echo "UNDER MAINTENANCE"
exit 1
fi
touch ~/.mylock
# ... the rest of your code
rm ~/.mylock
要得到fancier/safer,可以"trap"EXIT
信号在最后自动去掉:
trap 'rm ~/.mylock' EXIT
为避免竞争条件,您可以使用 flock(1)
和
锁定文件。有 one flock(1) implementation
它声称可以在 Linux、BSD 和 OS X 上工作。我还没有看到一个
明确用于 Unix。
有一些有趣的讨论 。
更新:
我从 Randal L. Schwartz here 那里找到了一个非常聪明的方法。我真的很喜欢这一个。它依赖于 flock(1)
和 bash
,并将脚本本身用作自己的锁定文件。检查一下:
/usr/local/bin/onlyOne
是获取锁的脚本
#!/bin/bash
exec 200< [=10=]
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
使用 flock
并将其放在您的脚本之上:
if ! flock -xn /path/to/lockfile ; then
echo "script is already running."
echo "Aborting."
exit 1
fi
注意:path/to/lockfile
可能是您脚本的路径。这样做可以避免创建额外的文件。
我想阻止其他终端在另一个终端 运行 宁时 运行 宁某个脚本但是在 bash 但我不太确定我会怎么做能够去做。非常感谢任何帮助或提示!
例如: 当该脚本在另一个终端上 运行 时,所有其他终端也将无法 运行 该特定脚本。并显示消息 "UNDER MAINTENANCE".
你可以使用一个"lockfile."的概念例如:
if [ -f ~/.mylock ]; then
echo "UNDER MAINTENANCE"
exit 1
fi
touch ~/.mylock
# ... the rest of your code
rm ~/.mylock
要得到fancier/safer,可以"trap"EXIT
信号在最后自动去掉:
trap 'rm ~/.mylock' EXIT
为避免竞争条件,您可以使用 flock(1)
和
锁定文件。有 one flock(1) implementation
它声称可以在 Linux、BSD 和 OS X 上工作。我还没有看到一个
明确用于 Unix。
有一些有趣的讨论
更新:
我从 Randal L. Schwartz here 那里找到了一个非常聪明的方法。我真的很喜欢这一个。它依赖于 flock(1)
和 bash
,并将脚本本身用作自己的锁定文件。检查一下:
/usr/local/bin/onlyOne
是获取锁的脚本
#!/bin/bash
exec 200< [=10=]
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
使用 flock
并将其放在您的脚本之上:
if ! flock -xn /path/to/lockfile ; then
echo "script is already running."
echo "Aborting."
exit 1
fi
注意:path/to/lockfile
可能是您脚本的路径。这样做可以避免创建额外的文件。