Quantcast
Channel: VMware Communities : Discussion List - ESXi
Viewing all articles
Browse latest Browse all 8132

shutdown ESXi by APC UPS script

$
0
0

I found this automatic shutdown script online,but when excute it on my ESXi 6.7 U2 I alwasy get this error. Can anyone please help ?

 

/vmfs/volumes/database/ups.sh: line 140: syntax error: unterminated quoted string

 

 

#!/bin/ash

# title: powerdown-esxi6.sh

# version: 0.5

# date: october 09, 2011

# author: herwarth heitmann

# edit by: massimo vannucci

 

 

#variables

PATH=/bin:/sbin:/usr/bin:/usr/sbin

VIMSH_WRAPPER=vim-cmd

VM_FILE=vm_list

INTERVAL=60

MAXLOOP=3

#DATE=`date "+%Y-%m-%d   %H:%M:%S"`

# To enable logging, set the following variable to 1

LOG_ENABLED=1

LOG_FILE=/vmfs/volumes/sandisk480g/powerdown-esxi6.log

# Remember that >> after echo, redirect and append to file

 

 

# Set the log file

if [ $LOG_ENABLED -eq 1 ]; then

  echo -e "\n\n\n"`date "+%Y-%m-%d   %H:%M:%S"` "\t\tExecuting powerdown-esxi5.sh" >> $LOG_FILE

fi

 

 

#check if parameter given

case "$1" in

    "") LASTACTION=shutdown

        ;;

reboot) LASTACTION=reboot

        ;;

vmonly) LASTACTION=vmonly

        ;;

     *) echo "usage $0 <|vmonly|reboot>"

        exit 1

        ;;

esac

 

 

#retrieve all VmId for VM(s) registered under ESXi host

${VIMSH_WRAPPER} vmsvc/getallvms >> $LOG_FILE

${VIMSH_WRAPPER} vmsvc/getallvms | awk '{print $1}' | grep -v 'Annotation' | grep -v 'Vmid' > $VM_FILE

 

 

#first time initialisation

ERROR=0

FIRSTRUN=1

LOOP=0

 

 

#we want to run the loop at least 1 time! and loop until no more errors occur

while [ $ERROR -ne 0 -o $FIRSTRUN -eq 1 ]; do

  LOOP=$(($LOOP+1))

  if [ $FIRSTRUN -eq 0 ]; then

    if [ $LOG_ENABLED -eq 1 ]; then

      echo -e `date "+%Y-%m-%d   %H:%M:%S"` "\t\tGive virtual machines time to shutdown..." >> $LOG_FILE

    else

      echo "Give virtual machines time to shutdown..."

    fi

    sleep $INTERVAL

  fi

  #exit loop if $LOOP gets bigger than $MAXLOOP

  if [ $LOOP -gt $MAXLOOP ]; then

    echo "Maximum loops reached!"

    break

  fi

 

 

  FIRSTRUN=0

  ERROR=0

  for VM_LINE in $(cat ${VM_FILE}); do

    STATE=$(${VIMSH_WRAPPER} vmsvc/power.getstate ${VM_LINE} | grep -v 'runtime')

    if [ "$STATE" = "Powered off" -o "$STATE" = "Suspended" ]; then

      if [ $LOG_ENABLED -eq 1 ]; then

        echo -e `date "+%Y-%m-%d   %H:%M:%S"` "\t\tVM with ID: ${VM_LINE} is: $STATE, skipping..." >> $LOG_FILE

      else

        echo "VM with ID: ${VM_LINE} is: $STATE, skipping..."

      fi

    else

      #try to do proper shutdown if VMware Tools are installed

      if [ $LOG_ENABLED -eq 1 ]; then

        echo -e `date "+%Y-%m-%d   %H:%M:%S"` "\t\tVM with ID: ${VM_LINE:} is: $STATE, trying guest shutdown..." >> $LOG_FILE

      else

        echo "VM with ID: ${VM_LINE} is: $STATE, trying guest shutdown..."

      fi

      ${VIMSH_WRAPPER} vmsvc/power.shutdown "${VM_LINE}" > /dev/null 2>&1

      #if it fails to shutdown, we know there are no VMware Tools installed

      if [ $? -eq 1 ]; then

        #hard power off

        if [ $LOG_ENABLED -eq 1 ]; then

          echo -e `date "+%Y-%m-%d   %H:%M:%S"` "\t\tGuest shutdown not working, hard powering off" >> $LOG_FILE

        else

          echo -e "\tGuest shutdown not working, hard powering off"

        fi

        ${VIMSH_WRAPPER} vmsvc/power.off "${VM_LINE}" > /dev/null 2>&1

      else

        if [ $LOG_ENABLED -eq 1 ]; then

          echo -e `date "+%Y-%m-%d   %H:%M:%S"` "\t\tSuccessfully initiated shutdown of ${VM_LINE}" >> $LOG_FILE

        else

          echo -e "\t\tSuccessfully initiated shutdown of ${VM_LINE}"

        fi

      fi

      ERROR=$(($ERROR+1))

    fi

  done

done

 

 

# clean up temporary file

rm -f $VM_FILE

 

 

#execute last action

case "$LASTACTION" in

shutdown) #shutdown ESXi host

          if [ $LOG_ENABLED -eq 1 ]; then

            echo -e `date "+%Y-%m-%d   %H:%M:%S"` "\t\tShutting down ESXi host..." >> $LOG_FILE

          fi

          /sbin/poweroff

          ;;

  reboot) #reboot ESXi host

          if [ $LOG_ENABLED -eq 1 ]; then

            echo -e `date "+%Y-%m-%d   %H:%M:%S"` "\t\tRebooting ESXi host..." >> $LOG_FILE

          fi

          /sbin/reboot

          ;;

  vmonly) #do nothing! only VMs needed to be shutdown

          if [ $LOG_ENABLED -eq 1 ]; then

            echo -e `date "+%Y-%m-%d   %H:%M:%S"` "\t\tDo nothing with ESXi host..." >> $LOG_FILE

          fi

          ;;

esac

exit 0


Viewing all articles
Browse latest Browse all 8132

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>