aboutsummaryrefslogtreecommitdiff
path: root/check_daemon.sh
blob: 68a56fd967e9263716b4357eae5ae3221307e67d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/bash
#
##########################################
# DESC:    script to check host services #
#		   (originally for freebsd,      #
#		    this is the linux version)   #
# VERSION: 0.1a                          #
# AUTHOR:  Toni U.                       #
# EMAIL:   matzeton@googlemail.com       #
##########################################
#

# SYNTAX: SERVICES="[SERVICE0][:[PROCESS_COUNT0]] [SERVICE1][:[PROCESS_COUNT1]] [SERVICEn][:[PROCESS_COUNTn]]"
SERVICES="pflogd:2 /usr/sbin/cron /usr/local/libexec/slapd /usr/sbin/ppp"

function checkroot {
if [ "`whoami`" == "root" ]; then
        return 0;
else
        echo -e "${RED}You are not root. Its posible that you dont see any daemons running (security restrictions).${NC}"
        read -n 1 -p "continue? (Y/n) " a
        [ "$a" != "Y" ] && { echo; exit 1; }
        return 1;
fi
}

function checkdaemon {
SERVICE=`echo "$1" | cut -d ':' -f 1`
SERVICE_COUNT=`echo "$1" | cut -d ':' -f 2  | grep -E "^[0-9]+$"`
[ "$SERVICE_COUNT" == "" ] && SERVICE_COUNT=1

PR=$(ps ax)
PS=$(echo "$PR" | grep "$SERVICE" | awk '{print $4}')
if [ "$PS" != "" ]; then
  PC=$(echo "$PS" | wc -l | tr -d ' ')
else
  PC=0
fi

SERVICE=`basename "$SERVICE"`
if [ $PC -gt 0 ]
    then
      NET=$(netstat -46ln | grep "$SERVICE" | awk '{print $5 "/" $6}')
      SRV_CHG=1
      PSC="${CYAN}$PC${NC}"
      if [ $PC -ge $SERVICE_COUNT ]; then
        PSC="${CYAN}$PC/$SERVICE_COUNT${NC}"
      else
        PSC="${RED}$PC/$SERVICE_COUNT${NC}"
        [ $SRV_CHG -eq 1 ] && { SRV_CHG=0; ALLOK=0; SRVERR=`expr $SRVERR + 1`; }
        echo -e "$SERVICE: ${RED}WARNING(${CYAN}`echo $PJ`${RED}): PCOUNT $SERVICE_COUNT != $PC ${NC}" >&2
      fi
      echo -e "$SRVTOT\t[ ${GREEN}OK${NC} ]:$SERVICE\t\tpcount $PSC${NC}"
      [ $NOSOCK -eq 0 ] && [ "$NET" != "" ] && echo -e "\t       sock ${cyan}`echo $NET`${NC}"
      SRVOK=`expr $SRVOK + 1`
    else
      echo -e "\n  ${red}+-->${NC}  [${RED}FAIL${NC}]  $SERVICE" 1>&2
      echo -e "$SERVICE service not running!" | mail -s "$SERVICE down" root
      ALLOK=0
      SRVERR=`expr $SRVERR + 1`
    fi
}

checkroot
echo -e "${RED}*${NC} ${CYAN}Checking services ..${NC}" 1>&2
NOSOCK=0
[ "$1" == "nosock" ] && NOSOCK=1

ALLOK=1
SRVOK=0
SRVERR=0
SRVTOT=0
for srv in $SERVICES
do
        checkdaemon "$srv"
        SRVTOT=`expr $SRVTOT + 1`
done

if [ $ALLOK -eq 1 ]; then
    echo -e "\n${CYAN}*${NC} [ ${GREEN}OK${NC} ] ${GREEN}$SRVOK${NC}/${GREEN}$SRVTOT${NC} ${CYAN}SERVICES${NC}" 1>&2
    exit 0
  else
    echo -e "\n${RED}###${NC} [${RED}FAIL${NC}] ${RED}$SRVERR/$SRVTOT${CYAN} services may not be available.${NC}" 1>&2
    exit 1
fi