确保在给定时间只运行一个 shell 脚本实例的快速而简单的方法是什么?
这是一个使用 锁定文件 并将 PID 回显到其中的实现。 如果在删除pidfile 之前进程被杀死,这可以作为一种保护:
LOCKFILE=/tmp/lock.txt if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then echo "already running" exit fi # make sure the lockfile is removed when we exit and then claim it trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT echo $$ > ${LOCKFILE} # do stuff sleep 1000 rm -f ${LOCKFILE}
这里的技巧是kill -0它不传递任何信号,而只是检查具有给定 PID 的进程是否存在。即使您的进程被杀死(除了),调用也trap将确保删除 锁定文件。kill -9
kill -0
trap
kill -9