我有6个进程proc -i 1, proc-i 2,proc -i 3, proc -i 4,proc -i 5, proc-i 6
我想一次性把他们拉起来,并且有掉的时候能自动拉起来
#!/bin/ksh
while true
do
var1=$(ps -ef | grep "sztcorc -i 1" |grep -v grep)
if [ "$var1" ];then
echo "进程1存在,......"
sleep 3
else
echo "进程1不存在,将启动......"
cd /sztc/sztc/bin
./sztcorc -i 1
sleep 5
fi
var2=$(ps -ef | grep "sztcorc -i 2" |grep -v grep)
if [ "$var2" ];then
echo "进程2存在,......"
sleep 3
else
echo "进程2不存在,将启动......"
cd /sztc/sztc/bin
./sztcorc -i 2
sleep 5
fi
done
我写的这种不成功,不是太熟这个,不知道怎么写,请教大家
------解决方案--------------------------------------------------------
#!/bin/ksh
while true
do
ps -ef
------解决方案--------------------------------------------------------
grep "sztcorc -i 1"
------解决方案--------------------------------------------------------
grep -v grep
if [ $? -eq 0 ];then
echo "进程1存在,......"
sleep 3
else
echo "进程1不存在,将启动......"
cd /sztc/sztc/bin
./sztcorc -i 1
sleep 5
fi
done
上面的办法是利用shell执行结果$?来判断进程是否存在。
还有一种办法是计算grep活动的行数
abc=`ps -ef
------解决方案--------------------------------------------------------
grep "...."
------解决方案--------------------------------------------------------
grep -v grep`
if [ $abc -ge 1 ]; then >= 1判断进程存在 -eq 0(=0)实际上就是进程不存在
进程存在
fi
------解决方案--------------------------------------------------------
为什么不写一个循环呢?
set -A PROCS proc1 proc2 proc3 proc4 proc5 proc6
typeset -i n=0
for i in ${PROCS [@]}
do
PROCS_PID[$n]=`ps -ef
------解决方案--------------------------------------------------------
grep ${i}
------解决方案--------------------------------------------------------
awk '{ print $2 }'`
if [ PROCS_PID[$n]=` = "" ];then
writeLog "*** ${i} has failed. "
return 1
fi
(( n = n + 1 ))
done