我想在其他终端运行时,请防止其他终端运行某个脚本。任何帮助或提示都可以非常感谢!
例如:当该脚本在另一个终端上运行时,所有其他终端也将无法运行该脚本。并显示一条消息"在维护下"。
您可以使用" 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