在运营中,偶尔要写些脚本做例行的工作,其中有些脚本是只能同时只被执行一次,不然可能会出错。比如宽带或者CIP在平衡统计的时候,会停掉备DB,并将流水和info表按一定的规则导进一个临时的表或者文件中,如果脚本被错误的同时执行了两次,统计出来的数据可能会不准确。
如果在脚本上加上个排他性的检查,发现该脚本正在执行的时候,第二次的执行就自动退出并给出提示可以避免一些认为的疏忽。
下面是一个例子通过fuser来检查当前脚本是否正在执行,如果正在执行则提示并退出脚本。
#!/bin/bash
#
#--------------------------------------------------------------------#
if fuser $0 2> /dev/null | sed "s///<$$//>//" | grep -q '[0-9]'; then
echo 'Script is already running...' 1>&2
exit 1
fi
#program starts here
sleep 60
echo "=end="