当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : (原创申精)服务器服务检测脚本
帖子发表于 : 2011-02-10 19:56 

注册: 2008-08-20 20:30
帖子: 33
送出感谢: 0 次
接收感谢: 1
访问我的博客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


页首
 用户资料  
 
2 楼 
 文章标题 : Re: (原创申精)服务器服务检测脚本
帖子发表于 : 2011-02-10 20:24 
头像

注册: 2007-10-20 11:30
帖子: 1132
送出感谢: 1
接收感谢: 0 次
支持mark一个


页首
 用户资料  
 
3 楼 
 文章标题 : Re: (原创申精)服务器服务检测脚本
帖子发表于 : 2011-02-17 16:11 

注册: 2009-11-09 8:44
帖子: 14
送出感谢: 0 次
接收感谢: 0 次
多学学脚本有好处啊


页首
 用户资料  
 
4 楼 
 文章标题 : Re: (原创申精)服务器服务检测脚本
帖子发表于 : 2012-02-01 12:24 

注册: 2007-08-22 17:12
帖子: 3
送出感谢: 0 次
接收感谢: 0 次
这个必须要mark啊,很需要的东西,让我理解管理服务器的思路。 :em11


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译