防止不明原因的多个进程跑同一个命令
这几天线上重新索引总是跑失败,看日志也看不出个所以然,只看见索引过程开始后飞快地就结束了,再看一下主程序的日志,发现应该是同时有2个进程在跑reindex, 至于这是怎么发生的,我就不知道了。只好看看有什么方法可以禁止跑多个进程,最后决定在重新跑命令之前先检查它是否已经在跑了,如果在了就等待它跑完,没在才重新跑。
1. ps 命令获取进程pid
2. 如果不存在则跑命令
3. 如果存在则直接退出, 也可以用tail --pid=${pid} -f /dev/null等待进程跑完
#!/bin/bash #pid=`pgrep test.log` #这个不知道为什么得不到结果 pid=`ps -aux | grep test.log| grep -v grep| awk {'print $2'}` #grep -v grep是为了把grep命令本身去掉 if [ -z "${pid}" ];then # -z判断变量是否已被设置或是否为空 bash -c 'echo "bbb" >> test.log && sleep 1s' #重跑命令 else echo ${pid} #tail --pid=${pid} -f /dev/null #等待已在跑的跑完 #wait ${pid} wait不行,因为只能等待子进程 fi
exit 666