基本要求:
运行一个脚本,如果脚本之前运行过并且未结束,则当前执行脚本退出执行。
即脚本同时只能有一个执行进程。
方法1:
例子:
#!/bin/bash
status=`ps -ef | grep "test1.sh" |grep -v "grep" |grep -v $$ | awk '{ print $2} '`
echo ${status}
if [ ! -z ${status} ]; then
echo "already run!"
exit 1
fi
while true ;do
echo "begin running..."
sleep 10000
done
本例使用ps列出所有进程,将排除grep和自身,如果还有则获取pid存入变量。
判断变量如果不为空,那么证明本脚本已经有进程在运行,退出。
方法2:
#!/bin/bash
status=`ps -ef | grep "test2.sh" |grep -v "grep" | wc -l `
echo ${status}
if [ ${status} -gt 2 ]; then
echo "already run!"
exit 1
fi
while true ;do
echo "begin running..."
sleep 10000
done
本例依旧使用ps列出所有进程,但使用wc对筛选后的记录进行统计计算。这里要说明一下逻辑判断是大于2,
而不是1.当第一次运行脚本时,输出的变量status值是2.因此,再执行脚本时,status值为3.
方法3:
这个方法比较简单,搞一个pid文件。
脚本运行后,先检查pid文件是否存在,存在则认为已经在运行,退出执行。不存在则创建并存入pid值。
脚本执行完毕,最后需要将pid文件删除。
这个脚本我就偷懒不写啦。