welcome to xlongwei.com

欢迎大家一起学习、交流、分享


QQ:9167702333 邮箱:admin@xlongwei.com

linux服务监控脚本


分类 Server   关键字 分享   标签 linux   发布 hongwei  1427004677404
注意 转载须保留原文链接,译文链接,作者译者等信息。  
这两天发现站点老是挂掉,nodemon也不好用,于是配置了阿里云的站点监控,再跑一个监控脚本,也许效果会好一点吧。ourjs的node运行脚本如下:
setsid node svr/ourjs.js config.newspaper.js >> /var/log/ourjs/newspaper.log 2>&1 &

  • 配置需要监控的服务器
    • 数组定义:host_ports=(host_name=host_port=uri_path)
      host_name为容易识别的服务器名称
      host_port为服务器ip和服务端口
      uri_path为经济的请求路径
    • 为脚本运行的服务器开放防火墙端口,内网ip和外网ip皆可,但要与host_port一致
      -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp -s 121.45.111.17 --dport 8090 -j ACCEPT
  • 监控结果记录日志
    • 先记录日期
      echo `date +'%Y-%m-%d %H:%M:%S'` > $log
    • 选择notify_host,需要提供发送邮件的接口,所以前面定义数组时将有邮件接口的host放在前面,找到第一个运行正常的host即可作为notify_host
          if [ -z $notify_host ]; then
              notify_host=$host_port
          fi
    • 检查完后检查日志文件,大于1行则发邮件通知
      curl http://$notify_host/admin/monitor.html?log=$log > /dev/null 2>&1
  • crontab定时运行监控脚本
    • crontab配置,每20分钟检查一次
      */20 * * * * /soft/monitor.sh >> /soft/logs/monitor-cron.log
    • 运行效果,测试时每两分钟检查一次

    • 邮件通知



脚本内容
log=/soft/logs/monitor.log
echo `date +'%Y-%m-%d %H:%M:%S'`
echo `date +'%Y-%m-%d %H:%M:%S'` > $log
host_ports=(
cms=127.0.0.1:8080=/admin/monitor.html
ourjs=127.0.0.1:8055=/userinfo/
)
#echo ${host_ports[*]}
for ((i=0;i<${#host_ports[@]};++i))
do
host_name=`echo ${host_ports[i]}|cut -d "=" -f 1`
host_port=`echo ${host_ports[i]}|cut -d "=" -f 2`
uri_path=`echo ${host_ports[i]}|cut -d "=" -f 3`
#echo $host_port
if curl http://$host_port$uri_path > /dev/null 2>&1
then
        #echo "$host_name is ok"
    if [ -z $notify_host ]; then
        notify_host=$host_port
    fi
else
    echo "$host_name is not ok"
        echo "$host_name is not ok" >> $log
        #尝试重启服务
        if [ $host_name = "cms" ]; then
        #echo "restart cms"
        sh /soft/restart-ite.sh notail
        elif [ $host_name = "ourjs" ]; then
        #echo "restart ourjs"
        sh /soft/newspaper.sh notail
        fi
fi
done
log_lines=`cat $log|wc -l`
#echo "$log lines: $log_lines"
if [ $log_lines -gt 1 ]; then
    echo "send notify email using: $notify_host, log: $log"
    #curl http://$notify_host/admin/monitor.html?log=$log > /dev/null 2>&1 #内容太长使用post方式提交
    log_content=`cat $log` #post log_content to notify_host, cause it can't get file $log
    curl -d "log=$log_content" http://$notify_host/admin/monitor.html?to=notify@host.com > /dev/null 2>&1
else
    echo "everything is ok"
fi


原文地址: 点此


评论列表
  • #0 hongwei 1427102802739

    setsid node svr/ourjs.js config.newspaper.js >> /var/log/ourjs/newspaper.log 2>&1 &

  • #1 己删除 1427102803869