确保给定时间仅运行一个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除外)。

10-07 22:29