/
kids_monitor.sh
executable file
·67 lines (56 loc) · 1.71 KB
/
kids_monitor.sh
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
#!/bin/sh
LANG=C
BASEDIR="/etc/mrtg"
ALERT_TO="ここに通知したい宛先メールアドレス"
TIME=`date "+%H:%M"`
# Challenge Touch
TARGET1="子どもの端末(チャレンジタッチ) の IP アドレス"
# GIGA PC
TARGET2="子どもの端末(学校の PC) の IP アドレス"
COUNT="1"
send_notify () {
TARGET_DEVICE="$1"
if [ "$2" = "1" ]; then
OLDSTAT="off"
elif [ "$2" = "0" ]; then
OLDSTAT="on"
else
OLDSTAT="unknown"
fi
if [ "$3" = "1" ]; then
NEWSTAT="off"
TIME=`date --date "0 minutes ago" "+%H:%M"`
elif [ "$3" = "0" ]; then
NEWSTAT="on"
else
NEWSTAT="unknown"
fi
(
echo "Subject: [KidsMon] ${TARGET_DEVICE} ${OLDSTAT} -> ${NEWSTAT} (${TIME})"
echo
echo "Power status has changed: ${OLDSTAT} -> ${NEWSTAT} (${TIME})"
) | /usr/sbin/sendmail "${ALERT_TO}"
}
ping -c "${COUNT}" "${TARGET1}" >/dev/null 2>&1
RETVAL=`echo $?`
PING_STATUS1=`echo $(( ( 1 - ${RETVAL} ) * 100))`
echo "${RETVAL} ${TIME}" > ${BASEDIR}/${TARGET1}.new
OLDSTAT=`awk '{ print $1 }' ${BASEDIR}/${TARGET1}.stat`
if [ "${RETVAL}" != "${OLDSTAT}" ]; then
send_notify "Touch" "${OLDSTAT}" "${RETVAL}"
fi
mv -f "${BASEDIR}/${TARGET1}.new" "${BASEDIR}/${TARGET1}.stat"
ping -c "${COUNT}" "${TARGET2}" >/dev/null 2>&1
RETVAL=`echo $?`
PING_STATUS2=`echo $(( ( 1 - ${RETVAL} ) * 100))`
echo "${RETVAL} ${TIME}" > ${BASEDIR}/${TARGET2}.new
OLDSTAT=`awk '{ print $1 }' ${BASEDIR}/${TARGET2}.stat`
if [ "${RETVAL}" != "${OLDSTAT}" ]; then
send_notify "PC" "${OLDSTAT}" "${RETVAL}"
fi
mv -f "${BASEDIR}/${TARGET2}.new" "${BASEDIR}/${TARGET2}.stat"
UPTIME=`uptime 2>/dev/null | awk '{print $3, $4, $5}' | sed -e "s/,/\ /g"`
echo "$PING_STATUS1"
echo "$PING_STATUS2"
echo "$UPTIME"
echo `hostname -f`