Chinaunix首页 | 论坛 | 博客
  • 博客访问: 243328
  • 博文数量: 29
  • 博客积分: 634
  • 博客等级: 上士
  • 技术积分: 432
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-09 22:24
文章分类

全部博文(29)

文章存档

2012年(8)

2011年(21)

分类: LINUX

2012-03-08 17:36:55


点击(此处)折叠或打开

  1. #!/bin/bash
  2. PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
  3. BASE_DIR="/opt/monitor"
  4. SYSCHECK_DIR="$BASE_DIR"/syscheck
  5. SERCHECK_DIR="$BASE_DIR"/sercheck
  6. CONTACT_DIR="$BASE_DIR"/contact
  7. SEND_MAIL=/bin/mail
  8. HOST_NAME=$(/bin/hostname)
  9. IP_ADD=$(/sbin/ifconfig |awk -F: '{print $2}'|grep Bcast|awk '{printf "%s:",$1}')
  10. cd "$BASE_DIR"

  11. #取出联系人邮件或手机号
  12. GET_ALERT_DST()
  13. {
  14. #group=$1 #The alert group
  15. Type=$1 #Only "mail" and "sms"
  16. DST=$(awk -v Type="$Type" '$1==Type' "$CONTACT_DIR"/sysop.list|awk '{$1=""}{print $0}') #取出邮件或者电话的列表
  17. echo "$DST"
  18. }

  19. #发送邮件函数
  20. SEND_MAIL()
  21. {
  22. TIME=$(/bin/date "+%F %R:%S")
  23. #"$SEND_MAIL" -s $HOST_NAME $1 -u "ALERT!!!:"$HOST_NAME"@"$TIME""
  24. echo -ne "$2" | $SEND_MAIL -s "$HOST_NAME@$TIME" $1
  25. }

  26. #发送短信函数
  27. SEND_SMS()
  28. {
  29. phone="$1"
  30. message=$(echo "$2" |/usr/bin/python "$BASE_DIR"/encode.py)
  31. curl "$phone"\&sms_text="$message"
  32. }

  33. #服务状态的检测以及发送报警
  34. MONITOR()
  35. {
  36. CHECK_SCRIPT_DIR=$1
  37. cd $CHECK_SCRIPT_DIR
  38. for script in $(ls *.sh)
  39. do
  40. CHECK_RESULT=$(source "$script")
  41. ALERTGROUP=$(grep '^ALERTGROUP' "$script" |cut -d= -f2)
  42. ALERT_MAIL=$(echo "$CHECK_RESULT" |awk '{if ($3!=0){$3="";print $0}}') #如果有状态不等与0的就不为空
  43. ALERT_SMS=$(echo "$CHECK_RESULT" |awk '{if ($3>1){$3="";print $0}}') #如果有状态大于1的就不为空
  44. SERVICES_STATUS=$(echo "$CHECK_RESULT" |awk -F "\t" '{print $3}') #取出服务状态值
  45. SERVICES_NAME=$(echo "$CHECK_RESULT" |awk -F "\t" '{print $2}').log #取service名称
  46. #检测服务器状态是否恢复正常,然后进行恢复正常的报警
  47. echo "$script" > /opt/txt.txt
  48. cd $SYSCHECK_DIR
  49. if [ -e "$SERVICES_NAME" ];then
  50. LAST_STATUS=$(cat $SYSCHECK_DIR/$SERVICES_NAME)
  51. if [ $LAST_STATUS -ge 1 -a $SERVICES_STATUS -eq 0 ];then
  52. for maildst in $(GET_ALERT_DST mail)
  53. do
  54. SEND_MAIL "$maildst" "$HOST_NAME : $IP_ADD\n$ALERT_MAIL ststus is ok"
  55. done
  56. fi

  57. if [ $LAST_STATUS -ge 2 -a $SERVICES_STATUS -eq 0 ];then
  58. for smsdst in $(GET_ALERT_DST sms)
  59. do
  60. SEND_SMS "$smsdst" "$HOST_NAME : $IP_ADD $ALERT_SMS"
  61. done
  62. fi
  63. echo $SERVICES_STATUS > $SYSCHECK_DIR/$SERVICES_NAME
  64. else
  65. echo $SERVICES_STATUS > $SYSCHECK_DIR/$SERVICES_NAME
  66. fi

  67. #检测服务器状态是否正常,然后进行报警
  68. cd $CHECK_SCRIPT_DIR
  69. if [ -n "$ALERT_MAIL" ]
  70. then
  71. for maildst in $(GET_ALERT_DST mail)
  72. do
  73. SEND_MAIL "$maildst" "$HOST_NAME : $IP_ADD\n$ALERT_MAIL"
  74. done
  75. fi

  76. if [ -n "$ALERT_SMS" ]
  77. then
  78. for smsdst in $(GET_ALERT_DST sms)
  79. do
  80. SEND_SMS "$smsdst" "$HOST_NAME : $IP_ADD $ALERT_SMS"
  81. done
  82. fi
  83. done
  84. }

  85. MONITOR "$SYSCHECK_DIR"
此脚本出自 http://blog.chinaunix.net/uid-25837154-id-3043851.html
经本人添加功能,故障恢复后的报警,其中有一些修改,如果侵犯作者权益,请与我联系,我将立即删除
阅读(1980) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~