确保只有一个Bash脚本实例正在运行的最佳方法是什么?
确保给定脚本仅一个实例正在运行的最简单/最佳方法是什么(假设它是Linux上的Bash)?
目前,我正在做:
ps -C script.name.sh > /dev/null 2>&1 || ./script.name.sh
但是它有几个问题:
- 它把检查放在脚本之外
- 它不允许我从单独的帐户运行相同的脚本-有时我想这样做。
-C
仅检查进程名称的前14个字符
当然,我可以编写自己的pidfile处理程序,但我认为应该有一种简单的方法。
回答:
如果所有用户的脚本都相同,则可以使用一种lockfile
方法。如果您获得了锁,请继续执行其他操作,并显示一条消息并退出。
举个例子:
[Terminal #1] $ lockfile -r 0 /tmp/the.lock[Terminal #1] $
[Terminal #2] $ lockfile -r 0 /tmp/the.lock
[Terminal #2] lockfile: Sorry, giving up on "/tmp/the.lock"
[Terminal #1] $ rm -f /tmp/the.lock
[Terminal #1] $
[Terminal #2] $ lockfile -r 0 /tmp/the.lock
[Terminal #2] $
/tmp/the.lock
获得脚本后,您的脚本将是唯一可以执行的脚本。完成后,只需取下锁。在脚本形式下,它可能类似于:
#!/bin/bashlockfile -r 0 /tmp/the.lock || exit 1
# Do stuff here
rm -f /tmp/the.lock
以上是 确保只有一个Bash脚本实例正在运行的最佳方法是什么? 的全部内容, 来源链接: utcz.com/qa/415388.html