清单 3. 防止脚本重复运行方法 1
#!/usr/bin/ksh
main(){
selfPID="$$"
scriptFile="$0"
typeset existingPid
existingPid=`getExistingPIDs $selfPID "$scriptFile"`
if [ ! -z "$existingPid" ]; then
echo "The script already running, exiting..."
exit -1
fi
doItsTask
}
#获取除本身进程以外其它运行当前脚本的进程的 PID
getExistingPIDs(){
selfPID="$1"
scriptFile="$2"
ps -ef | grep "/usr/bin/ksh ${scriptFile}" | grep -v "grep" | awk "{ if(\$2!=$selfPID) print \$2 }"
}
doItsTask(){
echo "Task is now being executed..."
sleep 20 #睡眠 20s,以模拟脚本在执行需要长时间完成的任务
}
main $*
清单 4. 防止脚本重复运行方法 2
#!/usr/bin/ksh
main(){
selfPID="$$"
scriptFile="$0"
typeset existingPid
existingPid=`getExistingPIDs $selfPID "$scriptFile"`
if [ ! -z "$existingPid" ]; then
echo "The script already running, killing it..."
kill -9 "$existingPid" #此方法有一定风险,慎用!
fi
doItsTask
}
#获取除本身进程以外其它运行当前脚本的进程的 PID
getExistingPIDs(){
selfPID="$1"
scriptFile="$2"
ps -ef | grep "/usr/bin/ksh ${scriptFile}" | grep -v "grep" | awk "{ if(\$2!=$selfPID) print \$2 }"
}
doItsTask(){
echo "Task is now being executed..."
sleep 20 #睡眠 20s,以模拟脚本在执行需要长时间完成的任务
}
main $*
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22661144/viewspace-1430664/
,如需转载,请注明出处,否则将追究法律责任。