April 09, 2014
PfSense with video cache.Server Monitor little dirty script.
#!/bin/bash ################################################################################ # Derek Demuro, this script is given as is, CopyLEFT # ################################################################################ ################################################################################ # README LEAME # ################################################################################ # This script will keep checking load, and log it. # Once the log hits the high load, its time to shutdown services and recall # memory, this way we avoid running into a kernel panic. # If we had DDOS attack, as services are down, the server won't be killed # Once the attack ends, the load will come down, and the services will load up # again # # The script will be modified later on to use functions, but not for now. ############################To Set Up########################################### # # To set this script up, you'll need to add it to a cronjob to run on boot # Most linux distros will allow a param <a href="https://twitter.com/reboot" class="twitter-atreply ext">@reboot<span class="ext"><span class="element-invisible"> (link is external)</span></span></a> /(path)/servermon.sh # So... crontab -e # At the bottom add: <a href="https://twitter.com/reboot" class="twitter-atreply ext">@reboot<span class="ext"><span class="element-invisible"> (link is external)</span></span></a> /(path)/servermon.sh # REMEMBER TO ADD EXECUTABLE BIT TO THE FILE (777 Permissions) ################################################################################ # SCRIPT CONFIGURATION # ################################################################################ #Initialize counter times=0 #How many times to run before clearing log linestoclear=$1 #Critical load to stop everything and restart highload=$2 #Wait till load gets to this load lowload=$3 #Wait for highload high=$4 #Wait for midload mid=$5 #Wait more for lowload low=$6 ################################################################################ #Log how many lines to log echo 'Script will run ' $1 ' times then will clear itself, High load: ' $highload 'Will wait to: ' $lowload "HighWait: $high, MidWait: $mid, LowWait: $low" while [ 0 ] do #add 1 to times times=`expr $times + 1` #check = load at the moment check=`cat /proc/loadavg | sed 's/\./ /' | awk '{print $1}'` date=`date` #Print of the time the cron started. echo 'Load at the moment' $check 'at date ' $date 'script ran: ' $times ' times' #How many times did it run? if [ $times -eq $linestoclear ] then #Clean the log! echo 'Log cleared' > hsysmon.log echo 'Script will run ' $1 ' times then will clear itself' times=0 fi #If load > 10 if [ $check -gt $highload ] then #Apache STOP var=`service apache2 stop` #Moment of shutdown date=`date` msg='Highload autorestart did run and load average was: ' echo 'At: ' $date 'With load: ' $check 'services shutted down successfoully' #Sleep while HIGH LOAD while [ $check -gt $lowload ] do if [ $check -gt $high ] then sleep $high else if [ $check -gt $mid ] then sleep $mid else if [ $check -gt $low ] then sleep $low else sleep 3 fi fi fi #New check check=`cat /proc/loadavg | sed 's/\./ /' | awk '{print $1}'` done #Continue echo 'Restarting on load: ' $check #Apache START apacheres=`service apache2 start` #Prints echo '#######################Apache Restart Log###########################' echo $apacheres echo '#######################Apache Restart Log###########################' echo '###########-----------------------------------------################' fi #Keep checking load sleep 3 done