(原创申精)服务器服务检测脚本

漏洞扫描、网关、防火墙、补丁升级、数据备份和迁移、系统故障排除
回复
傻东
帖子: 33
注册时间: 2008-08-20 20:30
送出感谢: 0
接收感谢: 1 次
联系:

(原创申精)服务器服务检测脚本

#1

帖子 傻东 » 2011-02-10 19:56

访问我的博客http://sillydong.com查看更多我的原创文章

由于最近一直在弄服务器,所以一直没有写Arch Linux的东西,这篇文章给出的脚本依旧是为服务器准备的。写shell多了,C都快忘了怎么写了,这样不好啊……

公司的服务器经常莫名其妙就挂,ssh上去又是好的,看看进程发现服务根本没打开,为什么呢?服务器被重启了!我的前任留下一个check.sh脚本,用来监测apache等进程,脚本在监测到进程过多时就重启服务器,结果有些服务器没有设置好开机启动那些apache之类的,就悲剧了。我就重新写了一个脚本,代替了crontab中原来的check.sh,在进程过多时不是重启服务器而是重启服务,这下服务器正常多了,网站那边负责的朝我喊“XXXX网站挂了,什么问题?”少了,哈哈。

废话多了点,脚本如下,使用前请一定看清代码并且修改其中一些路径之类的东西,以确保不会在你的服务器上造成什么不必要的伤害。

代码: 全选

#!/bin/bash
#    service --> name to test
#    apache --> apache|apache2|http|httpd
#    nginx --> nginx
#    mysql --> mysql|mysqld
#    php-cgi --> php-cgi
#    vsftpd --> vsftp|vsftpd
#    pure-ftpd --> pure-ftp|pure-ftpd
#    apache-tomcat --> java
#    nrpe --> nrpe
# Set the service name you want to test and its max number of processes first.
# Don't forget to check the bin path for each service.
# By Chen.Zhidong
# http://sillydong.com

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PATH

SERVICE="httpd mysqld vsftpd nrpe"
SERVICE_MAX=(70 5 5 1)

LOGPATH="/root"
APACHE_PATH="/usr/local/apache2"
NGINX_PATH="/usr/local/nginx"
PHP_PATH="/usr/local/php"
TOMCAT_PATH="/usr/local/apache-tomcat-6.0.26"
PURE_PATH="/usr/local/pureftpd"
NRPE_PATH="/usr/local/nagios"
i=0

if [ -e $LOGPATH/restart.log ]
then
    tail -n 40 $LOGPATH/restart.log > $LOGPATH/restart.tmp
    rm -rf $LOGPATH/restart.log
    mv $LOGPATH/restart.tmp $LOGPATH/restart.log
fi

for serv in $SERVICE
do
    counter=0
    counter=`ps -A | grep "$serv" | wc -l`

    if [ $counter -eq 0 ];then
        echo "$serv is off at $(date), starting..." >> $LOGPATH/restart.log
        case $serv in
            apache*|http*)
                #echo "apache start"
                $APACHE_PATH/bin/apachectl restart >> $LOGPATH/restart.log
                ;;
            nginx)
                #echo "nginx start"
                $NGINX_PATH/sbin/nginx -s reopen >> $LOGPATH/restart.log
                ;;
            mysql*)
                #echo "mysql start"
                #按照一般情况,在搭建服务器时就应该按照统一标准,此处可以按照实际情况修改一下
                if [ -e /etc/init.d/mysqld ];then
                    /etc/init.d/mysqld restart >> $LOGPATH/restart.log
                else
                    /etc/init.d/mysql restart >> $LOGPATH/restart.log
                fi
                ;;
            php-cgi)
                #echo "php-cgi start"
                $PHP_PATH/sbin/php-fpm restart >> $LOGPATH/restart.log
                ;;
            vsftp*)
                #echo "vsftpd start"
                /etc/init.d/vsftpd restart >> $LOGPATH/restart.log
                ;;
            pure-ftp*)
                #echo "pureftpd start"
                $PURE_PATH/sbin/pure-ftpd -B >> $LOGPATH/restart.log
                ;;
            java*)   #apache-tomcat
                #echo "tomcat start"
                $TOMCAT_PATH/bin/startup.sh >> $LOGPATH/restart.log
                ;;
            nrpe)
                #echo "nrpe start"
                $NRPE/bin/nrpe -c $NRPE/etc/nrpe.cfg
                ;;
            *)
                echo "Wrong service name while starting..." >> $LOGPATH/restart.log
                ;;
        esac
    else
        echo "$serv is on at $(date), next service..." >> $LOGPATH/restart.log
    fi

    if [ $counter -gt ${SERVICE_MAX[i]} ];then
        echo "$(date), too many $serv, needs to restart..." >> $LOGPATH/restart.log
        case $serv in
            apache*|http*)
                #echo "apache restart"
                $APACHE_PATH/bin/apachectl restart >> $LOGPATH/restart.log
                ;;
            nginx)
                #echo "nginx restart"
                $NGINX_PATH/sbin/nginx -s reload >> $LOGPATH/restart.log
                ;;
            mysql*)
                #echo "mysql restart"
                if [ -e /etc/init.d/mysqld ];
                then
                    /etc/init.d/mysqld restart >> $LOGPATH/restart.log
                else
                    /etc/init.d/mysql restart >> $LOGPATH/restart.log
                fi
                ;;
            php-cgi)
                #echo "php-cgi restart"
                $PHP_PATH/sbin/php-fpm restart >> $LOGPATH/restart.log
                ;;
            vsftp*)
                #echo "vsftpd restart"
                /etc/init.d/vsftp* restart >> $LOGPATH/restart.log
                ;;
            pure-ftp*)
                #echo "pureftpd restart"
                $PURE_PATH/sbin/pure-ftpd -B >> $LOGPATH/restart.log
                ;;
            java*)   #apache-tomcat
                #echo "tomcat restart"
                $TOMCAT_PATH/bin/startup.sh >> $LOGPATH/restart.log
                ;;
            nrpe)
                #echo "nrpe start"
                killall nrpe
                $NRPE/bin/nrpe -c $NRPE/etc/nrpe.cfg -d
                ;;
            *)
                echo "Warning: Wrong service name while restartiing..."  >> $LOGPATH/restart.log
                ;;
        esac
    fi
    let "i++"
done

exit 0

#End
傻东の学习笔记”重见天日啦!欢迎大家去看看!
http://sillydong.com
头像
linlee
帖子: 1132
注册时间: 2007-10-20 11:30
送出感谢: 1 次
接收感谢: 0

Re: (原创申精)服务器服务检测脚本

#2

帖子 linlee » 2011-02-10 20:24

支持mark一个
yaohoo
帖子: 14
注册时间: 2009-11-09 8:44
送出感谢: 0
接收感谢: 0

Re: (原创申精)服务器服务检测脚本

#3

帖子 yaohoo » 2011-02-17 16:11

多学学脚本有好处啊
sex366
帖子: 3
注册时间: 2007-08-22 17:12
送出感谢: 0
接收感谢: 0

Re: (原创申精)服务器服务检测脚本

#4

帖子 sex366 » 2012-02-01 12:24

这个必须要mark啊,很需要的东西,让我理解管理服务器的思路。 :em11
回复

回到 “服务器维护和硬件相关”