确保给定脚本仅一个实例正在运行的最简单/最佳方法是什么(假设它是Linux上的Bash)?
目前,我正在做:
ps -C script.name.sh > /dev/null 2>&1 || ./script.name.sh
但是它有几个问题:
-C
当然,我可以编写自己的pidfile处理程序,但我认为应该有一种简单的方法。
如果所有用户的脚本都相同,则可以使用一种lockfile方法。如果您获得了锁,请继续执行其他操作,并显示一条消息并退出。
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获得脚本后,您的脚本将是唯一可以执行的脚本。完成后,只需取下锁。在脚本形式下,它可能类似于:
/tmp/the.lock
#!/bin/bash lockfile -r 0 /tmp/the.lock || exit 1 # Do stuff here rm -f /tmp/the.lock