EditBear
Cadet
- Joined
- Sep 17, 2018
- Messages
- 1
Hi,
Please forgive my lack of knowledge, I'm a very old "nooby" from the days of "vacuum tubes", trying my best to understand programming and failing miserably!
I have a FreeNas 7 server with all my DVD movies on it, and a Windows Home Server (2011) with all my Blu-rays and music.
The WHS2011 starts up when any client HTPC starts up and shuts down when all clients sleep.
I can get my WHS2011 server to start-up my FreeNas server (by a WOL script during the WHS startup), but for years, I cannot work out how to get the FreeNas to shutdown when my WHS shuts down?
I then came upon this script (posted originally by sac0dan) which seems to monitor a range of IP addresses and shuts the FreeNas 7 server down if they all are quiet.
https://forums.freenas.org/index.php?threads/green-power-scheduled-power-off.232/
I only need to check just one IP address - that of my WHS2011 which is 192.168.0.220
My FreeNas7 is at 192.168.0.250
I can see the program is looping round but my ability is too little to strip out the unnecessary steps
I would be very grateful if some kind person would simplify this to check only the one IP address please?
Please forgive my lack of knowledge, I'm a very old "nooby" from the days of "vacuum tubes", trying my best to understand programming and failing miserably!
I have a FreeNas 7 server with all my DVD movies on it, and a Windows Home Server (2011) with all my Blu-rays and music.
The WHS2011 starts up when any client HTPC starts up and shuts down when all clients sleep.
I can get my WHS2011 server to start-up my FreeNas server (by a WOL script during the WHS startup), but for years, I cannot work out how to get the FreeNas to shutdown when my WHS shuts down?
I then came upon this script (posted originally by sac0dan) which seems to monitor a range of IP addresses and shuts the FreeNas 7 server down if they all are quiet.
https://forums.freenas.org/index.php?threads/green-power-scheduled-power-off.232/
I only need to check just one IP address - that of my WHS2011 which is 192.168.0.220
My FreeNas7 is at 192.168.0.250
I can see the program is looping round but my ability is too little to strip out the unnecessary steps
I would be very grateful if some kind person would simplify this to check only the one IP address please?
Code:
#!/bin/bash
{
lockfile=/tmp/autosuspend.lock
if [ ! -e $lockfile ]; then
trap "rm -f $lockfile; exit" INT TERM EXIT
touch $lockfile
echo "autosuspend script started"
#sleep 180 # Sleep for 3 mins to make sure the server don't shut down right away
class=192.168.0
myIP=192.168.0.250 #$(/sbin/ifconfig | egrep -o "192.168.0.[0-9]{1,3}")
failcount=0
maxfail=3 # Set the number of failure count before we do a shutdown
SLEEP=600 # Numbers of seconds between each check/loop
LOGFILE=/tmp/autosuspend.log
# Don't suspend if one of the following processes is active (separate by space):
STOPPROCS='storeBackup wget'
echo Logfile=$LOGFILE
unset known_host
_ping_last_host() {
# try to ping the last known active host
# return 0 on success, otherwise 1
echo "pinging last host $known_host" >> $LOGFILE
if [ $known_host ]; then
echo -n "`date` - pinging last host $known_host - " >> $LOGFILE
ping -c 1 $known_host >/dev/null;
if [ $? -eq 0 ]; then
echo "host is active" >> $LOGFILE
# Jepp! We're done
return 0
else
echo "fail" >> $LOGFILE
unset known_host
return 1
fi;
else
return 1
fi
}
_ping_range() {
# Ping an IP-range and look for a responding host.
# If there is one store it's IP in $known_host and return 0
# return 0 on success, otherwise 1
cnt=0
echo "`date` - pinging range... " >> $LOGFILE
for i in {2..14}; # Set the range
do
# Ignore my own IP
if [ ${class}.${i} != $myIP ]; then
echo "pinging ${class}.${i}" >> $LOGFILE
ping -c 1 ${class}.${i} >/dev/null
if [ $? -eq 0 ]; then
echo -n "${class}.${i} - " >> $LOGFILE
known_host=${class}.${i}
return 0;
fi
fi
done
return 1
}
_shutdown() {
# Do a shutdown if we failed for $failcount rounds
# We need a script suspend.sh in the current directory
echo "deciding doing shutdown or not. failcount = $failcount" >> $LOGFILE
if [ $failcount -eq $maxfail ];then
echo "`date` - doing a shutdown" >> $LOGFILE
more $LOGFILE | grep -F --line-buffered '' # clear buffer
rm $lockfile
trap - INT TERM EXIT
shutdown -p now >>$LOGFILE
more $LOGFILE | grep -F --line-buffered '' # clear buffer
#we will never arrive here with a shutdown...
echo "`date` - back from suspend" >> $LOGFILE
failcount=0;
fi
}
while [ 1 ];
do
proc_found=0
# look if uniterruptable jobs are running
for proc in $STOPPROCS
do
if [ "`pgrep $proc`" != "" ];then
echo "`date` - $proc is running." >> $LOGFILE
proc_found=1
break
fi
done
echo procfound=$proc_found
if [ $proc_found -eq 0 ]; then
# look for other hosts, that are alive in our subnet
_ping_last_host
if [ $? -ne 0 ];then
_ping_range
if [ $? -ne 0 ];then
let failcount++;
echo "failure No. $failcount" >> $LOGFILE
_shutdown;
else
echo "good." >> $LOGFILE
failcount=0;
fi
else
echo "good." >> $LOGFILE
failcount=0;
fi
fi
sleep $SLEEP;
done
rm $lockfile
trap - INT TERM EXIT
else
echo "autosuspend is already running. Exiting."
fi
} &