防止不明原因的多个进程跑同一个命令

这几天线上重新索引总是跑失败,看日志也看不出个所以然,只看见索引过程开始后飞快地就结束了,再看一下主程序的日志,发现应该是同时有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
 

 

posted @ 2021-04-23 15:50  水天需  阅读(69)  评论(0编辑  收藏  举报