小编典典

确保一次只运行一个 shell 脚本实例的快捷方式

all

确保在给定时间只运行一个 shell 脚本实例的快速而简单的方法是什么?


阅读 59

收藏
2022-07-08

共1个答案

小编典典

这是一个使用 锁定文件 并将 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

2022-07-08