- 论坛徽章:
- 0
|
工作中有些脚本是放在crontab中定时执行的,最近有发现系统繁忙时脚本重复执行的问题,看了论坛上也有几个贴子在讨论这个,我因为刚好处理过这个东东,就写点使用经验.
防止重复执行有两种简单常用方法:
一是扫描进程,在进程列表中搜索是否有相同的进程名
PROC=$0
PROCA=${PROC##*/}
PROC_NAME=${PROCA%.*}
num=`ps -ef|grep -i ${PROC_NAME}|grep -v grep|grep -v vi|grep -v pg|grep -v more|wc -l`
if [ $num -gt 1] ; then
echo "进程已存在";
exit 0;
fi
说明:ps -ef 列出除内核进程外的所有进程,(ps 其他参数对于本例子可能都有些缺点,-ef比较全面)
这些进程中还要除去一些非执行类的进程.
二是设定一个文件锁
if [ -f pid.log ]
then
echo "script runing" && exit 0
else
echo $$ > pid.log
fi
# ------- start of logic --
# ------- end of logic --
rm -f pid.log
这种方法缺点是脚本执行中有错误时跳出后,最后一步执行不到,下次进程就不会再自动起来了,除非手工删除.
上面两种方法,我个人觉得比较简单实用,适合一般情况.
请高手指正.
[ 本帖最后由 @龙井茶 于 2006-4-13 14:11 编辑 ] |
|