如何避免当前脚本是否被重复执行?
hi,各位大侠,
我这里有个简单的需求:
希望当前脚本只有一个实例在运行。
当前脚本大致如下:
shell_name=$0
echo "shell_name:"$shell_name
num_p=`ps aux | grep $shell_name | grep -v grep | wc -l` #这里的数量竟然是2!
echo "num_p:"$num_p
if [ $num_p -gt 1 ]
then
echo "multi processes"
else
echo "uniq process"
fi
请问,为什么上面的$num_p为2,而不是1呢?
打印ps aux | grep $shell_name | grep -v grep,显示只有一行啊
------解决方案--------------------在脚本中加一个标志位,老保证脚本只执行一次就好!
------解决方案--------------------进程数为2,应该是`command`是作为当前Shell的子Shell执行的。
至于保证脚本不被重复执行,可以考虑用文件锁,许多后台进程就是这样写的。
/var/run下面,或者/tmp下面。
------解决方案--------------------参考:
http://bbs.chinaunix.net/thread-3612103-1-1.html
http://bbs.chinaunix.net/thread-1800848-1-1.html