Fork me on GitHub

死循环判断进程是否存活脚本

  脚本如下:

#/bin/bash
SLEEPTIME=3
software=httpd
rpm -q psmisc &>/dev/null || ( yum install psmisc -y )&>/dev/null
#sleep 5
while :;do
    if ! killall -0 $software &> /dev/null;then
    systemctl restart $software &>/dev/null
    echo "At `date +'%F %T'`$software is restart " >> /var/log/${software}.log
    fi
    sleep $SLEEPTIME
done

  解释如下:

SLEEPTIME=3

  执行循环的时间,时间单位秒,变量方便修改,(时间为1也行,但实际重启服务1秒不一定能重启完成)

software=httpd

  判断是否存活的服务名

rpm -q psmisc &>/dev/null || ( yum install psmisc -y )&>/dev/null

  使用killall -0 判断服务是否存活,这里在循环前先判断psmisc服务是否存在,不存在则安装它

while :;do

  使用while循环,这里的冒号是什么也不做直接返回正确,冒号处使用true也行

if ! killall -0 $software &> /dev/null;then

  使用killall -0 探测httpd是否存活,&>/dev/null 输出的东西不显示在桌面上,这里用变量可以方便修改

 systemctl restart $software &>/dev/null

  重启服务,将输出信息重定向到垃圾箱中

echo "At `date +'%F %T'`$software is restart " >> /var/log/${software}.log

  当服务重启后,直接在对应的日志文件中追加日志信息

 fi

  if语句相对应

sleep $SLEEPTIME

  休眠,可以理解为多少秒执行一次,这里的变量值是3,则表示3秒循环一次

done

  do 语句想对应

 

posted @ 2021-06-23 10:23  Alex-Lzy  阅读(187)  评论(0编辑  收藏  举报