日期:2014-05-16  浏览次数:20640 次

如何避免当前脚本是否被重复执行?
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