LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1033|回复: 4

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

[复制链接]
发表于 2011-2-10 19:49:53 | 显示全部楼层 |阅读模式
访问我的博客http://sillydong.com看更多我的原创文章

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

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

废话多了点,脚本如下,使用前请一定看清代码并且修改其中一些路径之类的东西,以确保不会在你的服务器上造成什么不必要的伤害。
  1. #!/bin/bash
  2. #    service --> name to test
  3. #    apache --> apache|apache2|http|httpd
  4. #    nginx --> nginx
  5. #    mysql --> mysql|mysqld
  6. #    php-cgi --> php-cgi
  7. #    vsftpd --> vsftp|vsftpd
  8. #    pure-ftpd --> pure-ftp|pure-ftpd
  9. #    apache-tomcat --> java
  10. #    nrpe --> nrpe
  11. # Set the service name you want to test and its max number of processes first.
  12. # Don't forget to check the bin path for each service.
  13. # By Chen.Zhidong
  14. # http://sillydong.com

  15. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
  16. export PATH

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

  19. LOGPATH="/root"
  20. APACHE_PATH="/usr/local/apache2"
  21. NGINX_PATH="/usr/local/nginx"
  22. PHP_PATH="/usr/local/php"
  23. TOMCAT_PATH="/usr/local/apache-tomcat-6.0.26"
  24. PURE_PATH="/usr/local/pureftpd"
  25. NRPE_PATH="/usr/local/nagios"
  26. i=0

  27. if [ -e $LOGPATH/restart.log ]
  28. then
  29.     tail -n 40 $LOGPATH/restart.log > $LOGPATH/restart.tmp
  30.     rm -rf $LOGPATH/restart.log
  31.     mv $LOGPATH/restart.tmp $LOGPATH/restart.log
  32. fi

  33. for serv in $SERVICE
  34. do
  35.     counter=0
  36.     counter=`ps -A | grep "$serv" | wc -l`

  37.     if [ $counter -eq 0 ];then
  38.         echo "$serv is off at $(date), starting..." >> $LOGPATH/restart.log
  39.         case $serv in
  40.             apache*|http*)
  41.                 #echo "apache start"
  42.                 $APACHE_PATH/bin/apachectl restart >> $LOGPATH/restart.log
  43.                 ;;
  44.             nginx)
  45.                 #echo "nginx start"
  46.                 $NGINX_PATH/sbin/nginx -s reopen >> $LOGPATH/restart.log
  47.                 ;;
  48.             mysql*)
  49.                 #echo "mysql start"
  50.                 #按照一般情况,在搭建服务器时就应该按照统一标准,此处可以按照实际情况修改一下
  51.                 if [ -e /etc/init.d/mysqld ];then
  52.                     /etc/init.d/mysqld restart >> $LOGPATH/restart.log
  53.                 else
  54.                     /etc/init.d/mysql restart >> $LOGPATH/restart.log
  55.                 fi
  56.                 ;;
  57.             php-cgi)
  58.                 #echo "php-cgi start"
  59.                 $PHP_PATH/sbin/php-fpm restart >> $LOGPATH/restart.log
  60.                 ;;
  61.             vsftp*)
  62.                 #echo "vsftpd start"
  63.                 /etc/init.d/vsftpd restart >> $LOGPATH/restart.log
  64.                 ;;
  65.             pure-ftp*)
  66.                 #echo "pureftpd start"
  67.                 $PURE_PATH/sbin/pure-ftpd -B >> $LOGPATH/restart.log
  68.                 ;;
  69.             java*)   #apache-tomcat
  70.                 #echo "tomcat start"
  71.                 $TOMCAT_PATH/bin/startup.sh >> $LOGPATH/restart.log
  72.                 ;;
  73.             nrpe)
  74.                 #echo "nrpe start"
  75.                 $NRPE/bin/nrpe -c $NRPE/etc/nrpe.cfg
  76.                 ;;
  77.             *)
  78.                 echo "Wrong service name while starting..." >> $LOGPATH/restart.log
  79.                 ;;
  80.         esac
  81.     else
  82.         echo "$serv is on at $(date), next service..." >> $LOGPATH/restart.log
  83.     fi

  84.     if [ $counter -gt ${SERVICE_MAX[i]} ];then
  85.         echo "$(date), too many $serv, needs to restart..." >> $LOGPATH/restart.log
  86.         case $serv in
  87.             apache*|http*)
  88.                 #echo "apache restart"
  89.                 $APACHE_PATH/bin/apachectl restart >> $LOGPATH/restart.log
  90.                 ;;
  91.             nginx)
  92.                 #echo "nginx restart"
  93.                 $NGINX_PATH/sbin/nginx -s reload >> $LOGPATH/restart.log
  94.                 ;;
  95.             mysql*)
  96.                 #echo "mysql restart"
  97.                 if [ -e /etc/init.d/mysqld ];
  98.                 then
  99.                     /etc/init.d/mysqld restart >> $LOGPATH/restart.log
  100.                 else
  101.                     /etc/init.d/mysql restart >> $LOGPATH/restart.log
  102.                 fi
  103.                 ;;
  104.             php-cgi)
  105.                 #echo "php-cgi restart"
  106.                 $PHP_PATH/sbin/php-fpm restart >> $LOGPATH/restart.log
  107.                 ;;
  108.             vsftp*)
  109.                 #echo "vsftpd restart"
  110.                 /etc/init.d/vsftp* restart >> $LOGPATH/restart.log
  111.                 ;;
  112.             pure-ftp*)
  113.                 #echo "pureftpd restart"
  114.                 $PURE_PATH/sbin/pure-ftpd -B >> $LOGPATH/restart.log
  115.                 ;;
  116.             java*)   #apache-tomcat
  117.                 #echo "tomcat restart"
  118.                 $TOMCAT_PATH/bin/startup.sh >> $LOGPATH/restart.log
  119.                 ;;
  120.             nrpe)
  121.                 #echo "nrpe start"
  122.                 killall nrpe
  123.                 $NRPE/bin/nrpe -c $NRPE/etc/nrpe.cfg -d
  124.                 ;;
  125.             *)
  126.                 echo "Warning: Wrong service name while restartiing..."  >> $LOGPATH/restart.log
  127.                 ;;
  128.         esac
  129.     fi
  130.     let "i++"
  131. done

  132. exit 0

  133. #End
复制代码
发表于 2011-2-15 16:13:47 | 显示全部楼层
对网站维护人员很有用的
回复 支持 反对

使用道具 举报

发表于 2011-2-17 23:20:33 | 显示全部楼层
...脚本在监测到进程过多时就重启服务器...
为什么不考虑升级硬件呢?比如加内存或换配置高一些的服务器或多加一两台服务器迁移一部分服务过去,甚或是上虚拟化方案?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-19 22:15:06 | 显示全部楼层
运维铁律:任何时候不要随意重启服务器,所以前任的脚本就不该那么做,部分机子是VPS,考虑到运维成本,没必要升级配置,更多时候是因为配置的问题而导致资源不够用,起码我上手之后基本不出现资源不够用的情况了
回复 支持 反对

使用道具 举报

发表于 2011-3-13 03:00:18 | 显示全部楼层
受教。
生产系统随便重启机器是算故障的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表