Initial github commit
This commit is contained in:
commit
12c4b63473
0
swapupdate.sh
Normal file
0
swapupdate.sh
Normal file
98
swapwatch.sh
Normal file
98
swapwatch.sh
Normal file
@ -0,0 +1,98 @@
|
||||
#!/bin/bash
|
||||
#version number
|
||||
#2.0.0
|
||||
#rewrite by rlong
|
||||
|
||||
LOGDIR="/usr/local/lp/logs"
|
||||
TMPFILE="/usr/local/lp/temp/swapwatch.results"
|
||||
|
||||
#Create and clear TMPFILE
|
||||
touch $TMPFILE
|
||||
cat /dev/null > $TMPFILE
|
||||
|
||||
#check if it's already running
|
||||
if [ "$(ps ax | grep "$(basename $0)" -c )" -gt 4 ]
|
||||
then
|
||||
exit 1
|
||||
else
|
||||
|
||||
#Find Current Load
|
||||
load=$(awk '{print $1}' /proc/loadavg | cut -d. -f1)
|
||||
|
||||
#Find Current Free Swap
|
||||
swap_free=$(grep SwapFree /proc/meminfo | awk '{print $2}')
|
||||
|
||||
#Find Swap Total
|
||||
swap_total=$(grep SwapTotal /proc/meminfo | awk '{print $2}')
|
||||
|
||||
#get thresholds
|
||||
source /usr/local/lp/configs/swapwatch/swapwatch.conf
|
||||
|
||||
#if that fails (file got rm'd?), use some defaults
|
||||
if [ "$?" -ne 0 ]
|
||||
then
|
||||
loadthreshold=5
|
||||
swapthreshold=524288
|
||||
contact="support@liquidweb.com"
|
||||
fi
|
||||
|
||||
#check if we should run. either can trigger it
|
||||
#make sure server has a swap partition > 0 too
|
||||
if [[ "$load" -gt "$loadthreshold" || ("$swap_free" -lt "$swapthreshold" && "$swap_total" -ne 0) ]]
|
||||
then
|
||||
|
||||
#Echo everything into a temp file, to help with ZD compatibility
|
||||
echo "Load at $load" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
echo "Swap free at $swap_free" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
echo "Swap threshold is at $swapthreshold" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
echo "Apache Status" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
/usr/bin/lynx -dump -width 500 -connect_timeout=10 http://127.0.0.1/whm-server-status | grep -v ___ | grep -v OPTIONS >> $TMPFILE 2>&1
|
||||
echo "" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
echo "Busiest Sites" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
/usr/bin/lynx -dump -width 500 -connect_timeout=5 http://127.0.0.1/whm-server-status | awk 'BEGIN { FS = " " } ; { print $12 }' | sed '/^$/d' | sort | uniq -c | sort -rn >> $TMPFILE 2>&1
|
||||
echo "" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
echo "Netstat for Port 80 Abuse" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
netstat -tn 2>/dev/null | grep :80 | awk '{print $5}' | cut -f1 -d: | sort | uniq -c | sort -rn | head >> $TMPFILE 2>&1
|
||||
echo "" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
echo "MySQL Process List" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
mysqladmin proc stat --verbose >> $TMPFILE 2>&1
|
||||
echo "" >> $TMPFILE
|
||||
echo "Process List" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
/bin/ps faux >> $TMPFILE 2>&1
|
||||
echo "" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
echo "Processes sorted by RESIDENT memory" >> $TMPFILE
|
||||
echo "" >> $TMPFILE
|
||||
ps -e -o pid,rss,vsz,args --sort -rss,-vsz >> $TMPFILE 2>&1
|
||||
|
||||
|
||||
|
||||
#Send the email to the $contact address
|
||||
subject="[LW] Swapwatch.sh on $(hostname)"
|
||||
contents=$(cat $TMPFILE)
|
||||
|
||||
/usr/sbin/sendmail "$contact" <<EOF
|
||||
subject:$subject
|
||||
$contents
|
||||
EOF
|
||||
|
||||
#restart apache to attempt to save server
|
||||
/etc/init.d/httpd restart > /dev/null 2>&1
|
||||
|
||||
#log that swapwatch triggered
|
||||
echo "[ $(date +%c) ] swapwatch triggered - Load $load - Free swap $swap_free" >> /usr/local/lp/logs/swapwatch.log
|
||||
fi
|
||||
#remove the tempfile
|
||||
rm -f $TMPFILE
|
||||
fi
|
75
swapwatchinstall.sh
Normal file
75
swapwatchinstall.sh
Normal file
@ -0,0 +1,75 @@
|
||||
#!/bin/bash
|
||||
#this will create swapwatch.sh, swapwatch.conf, and crontab to run swapwatch.sh, and swapwatchupdater
|
||||
|
||||
###############################################################################
|
||||
|
||||
APPDIR="/usr/local/lp/apps/swapwatch"
|
||||
LOGDIR="/usr/local/lp/logs"
|
||||
CONFDIR="/usr/local/lp/configs/swapwatch"
|
||||
swapurl="http://layer3.liquidweb.com/monitoring/swapwatch.sh" #this will be appserv or nagilink
|
||||
updateurl="http://layer3.liquidweb.com/monitoring/swapupdate.sh" #this will be appserv or nagilink
|
||||
|
||||
###############################################################################
|
||||
|
||||
#set default values, these can be changed in swapwatch.conf, but they are
|
||||
#better than ridgid default values
|
||||
|
||||
#cpus is an easy count
|
||||
cpus=$(grep processor /proc/cpuinfo -c)
|
||||
#memory in kB
|
||||
memory=$(grep MemTotal /proc/meminfo |awk '{print $2}')
|
||||
|
||||
#load trigger is 5 * CPUs
|
||||
loadthresh=$( expr $cpus \* 5 )
|
||||
|
||||
#memory is: 2G thresh for 7+, 1G for 2+, .5G for less than that
|
||||
G=1048576 #your a gigabyte
|
||||
if [ $memory -gt $( expr 7 \* $G ) ]
|
||||
then
|
||||
swapthresh=$( expr 2 \* $G )
|
||||
elif [ $memory -gt $( expr 2 \* $G ) ]
|
||||
then
|
||||
swapthresh=$G
|
||||
else
|
||||
swapthresh=$( expr $G / 2 )
|
||||
fi
|
||||
|
||||
###############################################################################
|
||||
|
||||
##create the config file
|
||||
#loadthreshold=5
|
||||
#swapthreshold=1048576
|
||||
#update=yes
|
||||
mkdir -p "$CONFDIR"
|
||||
cat > "$CONFDIR/swapwatch.conf" << EOM
|
||||
loadthreshold=$loadthresh
|
||||
swapthreshold=$swapthresh
|
||||
update=yes
|
||||
contact="support@liquidweb.com"
|
||||
EOM
|
||||
|
||||
###############################################################################
|
||||
|
||||
#install
|
||||
mkdir -p "$APPDIR"
|
||||
echo "downloading swapwatch.sh"
|
||||
wget -O "$APPDIR/swapwatch.sh" $swapurl
|
||||
chmod +x "$APPDIR/swapwatch.sh"
|
||||
echo "*/3 * * * * root $APPDIR/swapwatch.sh > /dev/null 2>&1" > /etc/cron.d/swapwatch
|
||||
|
||||
###############################################################################
|
||||
|
||||
##get update script
|
||||
wget -O "$APPDIR/swapupdate.sh" $updateurl
|
||||
chmod +x "$APPDIR/swapupdate.sh"
|
||||
##check randomly once a week, to prevent tons of simmul conns to appserv
|
||||
min=$[ ( $RANDOM % 60 ) ] #0-59
|
||||
hour=$[ ( $RANDOM % 24 ) ] #0-23
|
||||
dow=$[ ( $RANDOM % 7 ) ] #0-6
|
||||
# $min $hour * * $dow
|
||||
echo "$min $hour * * $dow root $APPDIR/swapupdate.sh > /dev/null 2>&1" > /etc/cron.d/swapupdate
|
||||
|
||||
###############################################################################
|
||||
|
||||
#log install
|
||||
echo "[ $(date +%c) ] Swapwatch installed" >> $LOGDIR/swapwatch.log
|
Loading…
Reference in New Issue
Block a user