diff --git a/defaults.inc b/defaults.inc index 48e0dd10..b1982f97 100755 --- a/defaults.inc +++ b/defaults.inc @@ -1,5 +1,5 @@ -VERS='2.4.11-12102023' +VERS='2.4.12-12102023' noheader=' update service dailytemp ' hc_cw=60 diff --git a/esxi-scripts/esxi-shutdown2.sh b/esxi-scripts/esxi-shutdown2.sh index e136b95e..0ce97698 100644 --- a/esxi-scripts/esxi-shutdown2.sh +++ b/esxi-scripts/esxi-shutdown2.sh @@ -1,42 +1,42 @@ #/bin/sh -#Shutdown servers with pass-through devices -#vim-cmd vmsvc/power.shutdown 3 - - -VMS=`vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1}'` -for VM in $VMS ; do - PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"` - if [ "$PWR" == "Powered on" ] ; then - name=`vim-cmd vmsvc/get.config $VM | grep -i "name =" | awk '{print $3}' | head -1 | cut -d "\"" -f2` - echo "Powered on: $name" - echo "Suspending: $name" - vim-cmd vmsvc/power.suspend $VM > /dev/null & - fi -done - -while true ; do - RUNNING=0 - for VM in $VMS ; do - PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"` - if [ "$PWR" == "Powered on" ] ; then - echo "Waiting..." - RUNNING=1 - fi - done - if [ $RUNNING -eq 0 ] ; then - echo "Gone..." - break - fi - sleep 1 -done - -echo "Now we put the Host into maintenance mode..." +echo "Putting the Host into maintenance mode ..." vim-cmd hostsvc/maintenance_mode_enter -echo "Now we suspend the Host..." -esxcli system shutdown poweroff -d 10 -r "Shell initiated system shutdown" +VMS=`vim-cmd vmsvc/getallvms | grep -v Vmid | awk '{print $1}'` +for VM in $VMS; do + if [ $VM -eq $VM ]; then + PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"` + if [ "$PWR" == "Powered on" ] ; then + name=`vim-cmd vmsvc/get.config $VM | grep -i "name =" | awk '{print $3}' | head -1 | cut -d "\"" -f2` + echo "Shutting down: $name" + vim-cmd vmsvc/power.shutdown $VM > /dev/null & + fi + fi +done +echo "Waiting for all VM's to be powered off ..." +while true ; do + RUNNING=0 + for VM in $VMS; do + if [ $VM -eq $VM ]; then + PWR=`vim-cmd vmsvc/power.getstate $VM | grep -v "Retrieved runtime info"` + if [ "$PWR" == "Powered on" ] ; then + RUNNING=1 + fi + fi + done + if [ $RUNNING -eq 0 ] ; then + echo "DONE" + break + fi + sleep 1 +done + +echo "Shutting down the Host in 10secs ..." +esxcli system shutdown poweroff -d 10 -r "Power-Monitor script initiated system shutdown" + +echo "Disable maintenance mode before powering off ..." esxcli system maintenanceMode set -e false -t 0 -exit \ No newline at end of file +exit 0 \ No newline at end of file diff --git a/offsite-power-check.sh b/offsite-power-check.sh index 9386b296..e030c114 100755 --- a/offsite-power-check.sh +++ b/offsite-power-check.sh @@ -14,20 +14,20 @@ PW_LOGPOWER=${PW_LOGFOLDER}/log-power . /opt/idssys/powerwall/settings.conf -SHUTDOWNSERVERS_AT_LOAD=90 #percent +SHUTDOWNSERVERS_AT_LOAD=80 #percent SHUTDOWNSERVERS_AFTER=5 #minutes WAIT_TO_POWER_SERVERS=5 #minutes LOG_INTERVAL_NORMAL=60 #minutes LOG_INTERVAL_ABNORMAL=30 #seconds LOG_INTERVAL_CHARGING=120 #seconds -RENOTIFY_LOWPOWER=5 #minutes +RENOTIFY_LOWPOWER=10 #minutes PW_OFFSITEHOSTS="10.2.1.11" # PW_OFFSITEHOSTS="10.2.1.11 10.2.1.12" # TEST=true #full if [ "$TEST" != "" ]; then - SHUTDOWNSERVERS_AT_LOAD=70 + SHUTDOWNSERVERS_AT_LOAD=95 WAIT_TO_POWER_SERVERS=1 LOG_INTERVAL_NORMAL=1 LOG_INTERVAL_ABNORMAL=1 @@ -116,14 +116,12 @@ $(date)" touch ${PW_TMPFOLDER}/power.offsite.ac.low.notice fi - # if ([ ${OFFSITE_BATT_CAP%.*} -le ${SHUTDOWNSERVERS_AT_LOAD} ] || [ $(expr `date +%s` - $(stat -f %m ${PW_TMPFOLDER}/power.offsite.ac.low)) -ge $(echo "scale=2; ${SHUTDOWNSERVERS_AFTER}*60" | bc) ]) && [ ! -f ${PW_TMPFOLDER}/power.offsite.off ]; then - if [ ${OFFSITE_BATT_CAP%.*} -le ${SHUTDOWNSERVERS_AT_LOAD} ] && [ ! -f ${PW_TMPFOLDER}/power.offsite.off ]; then + if ([ ${OFFSITE_BATT_CAP%.*} -le ${SHUTDOWNSERVERS_AT_LOAD} ] || [ $(expr `date +%s` - $(stat -f %m ${PW_TMPFOLDER}/power.offsite.ac.low)) -ge $(echo "scale=2; ${SHUTDOWNSERVERS_AFTER}*60" | bc) ]) && [ ! -f ${PW_TMPFOLDER}/power.offsite.off ]; then echo "($(date +'%Y-%m-%d %H:%M:%S')) - ${OFFSITE_VOLTIN}'volts - ${OFFSITE_BATT_CAP}'% Battery - Powering Down Hosts!" >> ${PW_LOGFILE} SENDNOTICE "OFFSITE HOST POWER" "Powering DOWN offsite host(s) due to power outage" 1 touch ${PW_TMPFOLDER}/power.offsite.off for host in ${PW_OFFSITEHOSTS}; do if [ "$TEST" = "" ] || [ "$TEST" = "full" ]; then - # ssh root@${host} /vmfs/volumes/652c94ef-ee49895b-365d-00109b3fea40/.SCRIPTS/esxi-shutdown2.sh & ssh root@${host} sh < ${PW_FOLDER}/esxi-scripts/esxi-shutdown2.sh & else echo "TESTMODE: Shutting down '${host}'" @@ -136,17 +134,16 @@ $(date)" fi else - if [ $(expr `date +%s` - $(stat -f %m ${PW_TMPFOLDER}/power.ups.losscomm)) -ge 30 ]; then + if [ ! -f ${PW_TMPFOLDER}/power.ups.losscomm ]; then + touch ${PW_TMPFOLDER}/power.ups.losscomm + + elif [ $(expr `date +%s` - $(stat -f %m ${PW_TMPFOLDER}/power.ups.losscomm)) -ge 60 ]; then echo "($(date +'%Y-%m-%d %H:%M:%S')) - 0.0'volts - 0'% Battery - Restarting NUT service" >> ${PW_LOGFILE} SENDNOTICE "NUT DRIVER FAILURE" "Restarting NUT service" /usr/local/etc/rc.d/nut.sh restart sleep 10s rm -f ${PW_TMPFOLDER}/power.ups.losscomm - - elif [ ! -f ${PW_TMPFOLDER}/power.ups.losscomm ]; then - touch ${PW_TMPFOLDER}/power.ups.losscomm fi - fi sleep 5s done @@ -164,38 +161,38 @@ PWO_RESTART() { } -# LOGROTATE(){ -# lm=`expr $(date +'%m') - 1` -# if [ ${lm} = 0 ]; then -# lm=12 -# ly=`expr $(date +'%Y') - 1` -# else -# ly=$(date +'%Y') -# fi -# [ ${lm} -lt 10 ] && lm="0${lm}" -# ARCHIVEFOLDER=${PW_LOGARCHIVE}/${ly}-${lm} -# # mkdir -p ${ARCHIVEFOLDER} -# # mv ${PW_LOGFOLDER}/log* ${ARCHIVEFOLDER}/ 2> /dev/null -# [ ! -f ${PW_LOGFILE} ] && touch ${PW_LOGFILE} -# [ ! -f ${PW_LOGPOWER} ] && touch ${PW_LOGPOWER} -# backupstokeep=($(ls -d ${PW_LOGARCHIVE}/* 2> /dev/null | sort | tail -12)) -# for folder in $(ls -d ${PW_LOGARCHIVE}/* | sort -r); do -# keep=0 -# for filetokeep in ${backupstokeep[@]}; do -# echo "$folder $filetokeep" -# if [ "${folder}" == "${filetokeep}" ]; then -# keep=1; break -# fi -# done; -# [ ${keep} == 0 ] && rm -Rf ${folder} -# done -# } +LOGROTATE(){ + lm=`expr $(date +'%m') - 1` + if [ ${lm} = 0 ]; then + lm=12 + ly=`expr $(date +'%Y') - 1` + else + ly=$(date +'%Y') + fi + [ ${lm} -lt 10 ] && lm="0${lm}" + ARCHIVEFOLDER=${PW_LOGARCHIVE}/${ly}-${lm} + mkdir -p ${ARCHIVEFOLDER} + PWO_STOP + mv ${PW_LOGFOLDER}/log* ${ARCHIVEFOLDER}/ 2> /dev/null + PWO_START + backupstokeep=($(ls -d ${PW_LOGARCHIVE}/* 2> /dev/null | sort | tail -12)) + for folder in $(ls -d ${PW_LOGARCHIVE}/* | sort -r); do + keep=0 + for filetokeep in ${backupstokeep[@]}; do + echo "$folder $filetokeep" + if [ "${folder}" == "${filetokeep}" ]; then + keep=1; break + fi + done; + [ ${keep} == 0 ] && rm -Rf ${folder} + done +} case $1 in start) PWO_START &;; stop) PWO_STOP;; restart) PWO_RESTART;; - # logrotate) LOGROTATE;; + logrotate) LOGROTATE;; update) cd ${PW_FOLDER} if [ "`git log --pretty=%H ...refs/heads/master^ | head -n 1`" != "`git ls-remote origin -h refs/heads/master |cut -f1`" ]; then