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