2013年8月8日星期四

linux shell进程监控与自动重启--思路很清晰



注意:
(1)ps aux    显示系统全部进程,一行一个
(2)grep “abc”  从标准输入读取字符流,输出包含字符串“abc”的行
(3)grep -v “acb”   从标准输入读取字符流,输出不包含字符串“abc”的行
(4)wc -l        从标准输入读取字符流,输出行数

检测进程httpd是否存在

操作流程如下:
(1)读取系统所有进程
(2)判断包含指定进程名字的信息是否存在
通过管道连接,命令如下:
ps axu      |    grep  “httpd”           |      grep -v “grep”    |      wc -l
所有进程–>获取包含“httpd”的行–>删除grep进程信息–>输出最后的行数
通过判断命令的执行结果是否为 0  ,可以知道进程是否存在。
脚本如下:
#!/bin/sh
count=`ps axu | grep “httpd” | grep -v “grep”| wc -l`
if[$count -lt 1];then
sudo /home/proudboy/apache/admin/restart.sh
fi
注:还可以执行ps axu | grep “httpd” | grep -v “grep”,然后通过判断返回值是否为0来知道程序是否有输出,如下:
#!/bin/sh
count=`ps axu | grep “httpd” | grep -v “grep” `
if[$? != "0"];then
sudo /home/proudboy/apache/admin/restart.sh
fi
接下来是如何让shell脚本定时执行的问题,有两种方式可以实现:
(1)在shell里面做循环,例如:
#/bin/sh
while true; do
if [ "$?" != "0" ]; then
fi
sleep 2
done
(2)将shell脚本加入到corntab 或者 at 里面

如下Shell脚本 实现了对tomcat6进程监控,如果不存在自动重启。

#!/bin/sh
pid=`ps aux| grep "tomcat6" | grep -v grep | sed -n  '1P' | awk '{print $2}'`
if [ -z $pid ]; then
        echo "begin restart,please waiting..."
        sudo /etc/init.d/tomcat6 restart
        exit 1
else
        echo -e "exist ,don't need restart"
fi

没有评论:

发表评论