VMware ESXi 5.0 update 1 AutoStartManager代替スクリプトを書いてみた

2012-08-15追記
VMware ESXi 5.0 update 1のAutoStartManagerがBugFixされていたで、AutoStartManagerがBugFixされていたことを書いています。
 
 


VMware ESXi 5.0 update 1のAutoStartManagerの件』で「起動も含めてもうちょっとこうマシなやつを…」と書いたんですけど、少し調べるとAutoStartManagerがバグっぽい挙動してて、ちょいと書いてみれば良さ気な雰囲気が漂っていたので、とりあえずスクリプトを書いてみました。
即興で書いたので足りない部分も多々あるし、おかしかったり無駄だったりする処理もあるだろうし、見にくい部分もあったりしますが、そこはまぁ適当に補正してください。(つーかメンテナンスするつもりもあんまりないんですが…)
なおこれを使う場合、くれぐれも自己責任の下で実施してくださいね。
当然サポート範囲外でしょうし、何か不具合が起きても当然ながら私では責任は取れませんし、何より私が書いたスクリプトっていう時点でもうね……orz
というか、このブログ等で私が書いていることがほとんどの場合、自己責任の下で実施してもらう必要がものばかりなわけですが^^;
 
 

環境とか

ここではデータストアを “datastore1” とし、その “datastore1” に “bin” というディレクトリを作成して “vmware-autostart.sh” というスクリプトを設置します。
フルパスで書くと “/vmfs/volumes/datastore1/bin/vmware-autostart.sh” となります。
この辺の値は適当に自分の環境に置き換えてください。
また、完全ではないのですが、vSphere Client の『仮想マシンと起動およびシャットダウン』で自動起動/自動シャットダウンを設定されている仮想マシンの取得と、起動/シャットダウンの遅延時間を取得するようにしますので、設定自体は通常のように下のGUIで出来るようになるはずです。

 
 

/etc/rc.local の設定

ではまず、”/etc/rc.local” に次の行を追加します。

## AutoStartVMs
sed -i 's@/sbin/vmware-autostart.sh stop@sh /vmfs/volumes/datastore1/bin/vmware-autostart.sh stop@g' /sbin/shutdown.sh
sh /vmfs/volumes/datastore1/bin/vmware-autostart.sh start

1行目は “/sbin/shutdown.sh” に書かれている “/sbin/vmware-autostart.sh stop” という部分を、”sh /vmfs/volumes/datastore1/bin/vmware-autostart.sh stop” という記述に置き換えています。
2行目は “sh /vmfs/volumes/datastore1/bin/vmware-autostart.sh” を “start” という引数で実行しています。
この2行目の記述が、AutoStartManagerで自動起動設定している仮想マシンを起動する動作となります。
 
 

スクリプトの設置

次に “/vmfs/volumes/datastore1/bin” に “vmware-autostart.sh” を設置します。
中身は次の通りです。

#!/bin/sh                                                                                                                                                                             
#                                                                                                                                                                                     
#  Copyright (C) 2012 Lunatilia.net                                                                                                                                                   
#                                                                                                                                                                                     
#  ShellID : vmware-autostart.sh                                                                                                                                                      
#  Date    : 2012/04/19                                                                                                                                                               
#  Version : 0.1a                                                                                                                                                                     
#  Author  : Mitsuki Shirase                                                                                                                                                          
#                                                                                                                                                                                     
                                                                                                                                                                                      
#---------------------------------------                                                                                                                                              
# Env                                                                                                                                                                                 
#---------------------------------------                                                                                                                                              
export PATH=/bin:/sbin                                                                                                                                                                
SCRIPT_DIR=$( cd $(dirname $0); pwd )                                                                                                                                                 
VIMSH=/bin/vim-cmd                                                                                                                                                                    
ROOT_USER="root"                                                                                                                                                                      
INC=0                                                                                                                                                                                 
                                                                                                                                                                                      
                                                                                                                                                                                      
#---------------------------------------                                                                                                                                              
# Get AutoStart Config                                                                                                                                                                
#---------------------------------------                                                                                                                                              
GET_AUTOSTARTSEQ="hostsvc/autostartmanager/get_autostartseq"                                                                                                                          
GET_DEFAULT="hostsvc/autostartmanager/get_default"                                                                                                                                    
                                                                                                                                                                                      
                                                                                                                                                                                      
#---------------------------------------                                                                                                                                              
# VMIDs save file                                                                                                                                                                     
#---------------------------------------                                                                                                                                              
AUTOSTARTVMID="/AutoStartVMID"                                                                                                                                                        
AUTOSTOPVMID="/AutoStopVMID"                                                                                                                                                          
                                                                                                                                                                                      
                                                                                                                                                                                      
#---------------------------------------                                                                                                                                              
# Delay parameter                                                                                                                                                                     
#---------------------------------------                                                                                                                                              
START_DELAY=$( ${VIMSH} -U ${ROOT_USER} ${GET_DEFAULT} | grep startDelay | grep -o "[0-9]\{1,\}" )                                                                                    
STOP_DELAY=$( ${VIMSH} -U ${ROOT_USER} ${GET_DEFAULT} | grep stopDelay | grep -o "[0-9]\{1,\}" )                                                                                      
                                                                                                                                                                                      
                                                                                                                                                                                      
#---------------------------------------                                                                                                                                              
# Number of VMIDs                                                                                                                                                                     
#---------------------------------------                                                                                                                                              
NUMBER_OF_VMS=$( ${VIMSH} -U ${ROOT_USER} ${GET_AUTOSTARTSEQ} | grep vim.VirtualMachine | grep -o "[0-9]\{1,\}" | wc -l )                                                             
                                                                                                                                                                                      
                                                                                                                                                                                      
#---------------------------------------                                                                                                                                              
# Get VMIDs                                                                                                                                                                           
#---------------------------------------
${VIMSH} -U ${ROOT_USER} ${GET_AUTOSTARTSEQ} | grep vim.VirtualMachine | grep -o "[0-9]\{1,\}" > ${SCRIPT_DIR}${AUTOSTARTVMID}                                                        
echo > ${SCRIPT_DIR}${AUTOSTOPVMID}                                                                                                                                                   
while read BUFF                                                                                                                                                                       
do                                                                                                                                                                                    
    sed -i "1i ${BUFF}" ${SCRIPT_DIR}${AUTOSTOPVMID}                                                                                                                                  
done < ${SCRIPT_DIR}${AUTOSTARTVMID}                                                                                                                                                  
sed -i '$d' ${SCRIPT_DIR}${AUTOSTOPVMID}                                                                                                                                              
                                                                                                                                                                                      
                                                                                                                                                                                      
#---------------------------------------                                                                                                                                              
# AutoStart VMs                                                                                                                                                                       
#---------------------------------------                                                                                                                                              
vmware_autostart_vms() {                                                                                                                                                              
    if [ ${NUMBER_OF_VMS} -eq 0 ]; then                                                                                                                                               
        logger -t 'VMware[startup]' " Not defined."                                                                                                                                   
        exit                                                                                                                                                                          
    fi                                                                                                                                                                                
                                                                                                                                                                                      
    logger -t 'VMware[startup]' " Starting VMs(custom script)"                                                                                                                        
                                                                                                                                                                                      
    while read VMID                                                                                                                                                                   
    do                                                                                                                                                                                
        ${VIMSH} vmsvc/power.on ${VMID}                                                                                                                                               
        logger -t 'VMware[startup]' " Starting VMID ${VMID}."                                                                                                                         
        INC=`expr ${INC} + 1`                                                                                                                                                         
        if [ ${INC} -eq ${NUMBER_OF_VMS} ]; then                                                                                                                                      
            break                                                                                                                                                                     
        fi                                                                                                                                                                            
        sleep ${START_DELAY}                                                                                                                                                          
    done < ${SCRIPT_DIR}${AUTOSTARTVMID}                                                                                                                                              
}                                                                                                                                                                                     
                                                                                                                                                                                      
                                                                                                                                                                                      
#---------------------------------------                                                                                                                                              
# AutoStop VMs                                                                                                                                                                        
#---------------------------------------
vmware_autostop_vms() {                                                                                                                                                               
    if [ ${NUMBER_OF_VMS} -eq 0 ]; then                                                                                                                                               
        logger -t 'Vmware[shutdown]' " Not defined."                                                                                                                                  
    fi                                                                                                                                                                                
                                                                                                                                                                                      
    logger -t 'VMware[shutdown]' " Stopping VMs(custom script)"                                                                                                                       
                                                                                                                                                                                      
    while read VMID                                                                                                                                                                   
    do                                                                                                                                                                                
        ${VIMSH} vmsvc/power.shutdown ${VMID}                                                                                                                                         
        logger -t 'VMware[shutdown]' " Stopping VMID ${VMID}."                                                                                                                        
        INC=`expr ${INC} + 1`                                                                                                                                                         
        if [ ${INC} -eq ${NUMBER_OF_VMS} ]; then                                                                                                                                      
            break                                                                                                                                                                     
        fi                                                                                                                                                                            
        sleep ${STOP_DELAY}                                                                                                                                                          
    done < ${SCRIPT_DIR}${AUTOSTOPVMID}                                                                                                                                               
}                                                                                                                                                                                     
                                                                                                                                                                                      
                                                                                                                                                                                      
#---------------------------------------                                                                                                                                              
# Usage                                                                                                                                                                               
#---------------------------------------                                                                                                                                              
usage() {                                                                                                                                                                             
   echo "Usage: `basename "$0"` {start|stop|restart}"                                                                                                                                 
}                                                                                                                                                                                     
                                                                                                                                                                                      
                                                                                                                                                                                      
                                                                                                                                                                                      
#---------------------------------------                                                                                                                                              
# Call function                                                                                                                                                                       
#---------------------------------------                                                                                                                                              
case $1 in                                                                                                                                                                            
   "start")                                                                                                                                                                           
      vmware_autostart_vms                                                                                                                                                            
      ;;                                                                                                                                                                              
   "stop")                                                                                                                                                                            
      vmware_autostop_vms                                                                                                                                                             
      ;;                                                                                                                                                                              
   "restart")                                                                                                                                                                         
      vmware_autostop_vms                                                                                                                                                             
      vmware_autostart_vms                                                                                                                                                            
      ;;                                                                                                                                                                              
   *)                                                                                                                                                                                 
      usage                                                                                                                                                                           
      exit 1                                                                                                                                                                          
esac                                                                                                                                                                                  
 

“Env” はまぁそのまんま。
“Get AutoStart Config” は、自動起動/自動シャットダウンが設定されている仮想マシンのVMID取得と、遅延時間の取得に必要なコマンドを書いています。
“VMIDs save file” は、自動起動/自動シャットダウンが設定されている仮想マシンのVMIDを格納するリストファイルの名前を書いています。
“Delay parameter” は、起動時の遅延時間と、シャットダウン時の遅延時間を取得しています。
“Number of VMIDs” は、自動起動/自動シャットダウンが設定されている仮想マシンの数を取得しています。
“Get VMIDs” は、自動起動/自動シャットダウンが設定されている仮想マシンのVMIDを取得して、ファイルに吐き出しています。
また、シャットダウン時に起動時の逆順に処理するためのリストも作成しています。
“AutoStart VMs” は、取得したVMIDを読み込んで、実際に仮想マシンを起動する処理を実行しています。
“AutoStop VMs” は、逆順処理用のリストからVMIDを読み込んで、実際に仮想マシンをシャットダウンする処理を実行しています。
 
 
 
とりあえずここに貼るときにコピーミスをしていなければ、一応の動作確認はしていますので動くと思います。
しかも一度設置してしまえば、vSphere Clientからの シャットダウン/再起動 でも動きますので、毎回sshでコマンドを叩く必要はありません。
 
 
とりあえずこれで今日のところは勘弁してください(´・ω・`)
むしろどなたか、しっかりした例外処理とか、個別の仮想マシンの自動起動/自動シャットダウン対応とかを実装した「完全版スクリプト」をください……w

VMware ESXi 5.0 update 1 AutoStartManager代替スクリプトを書いてみた” への8件のフィードバック

追加

  1. おはようございます。評価ライセンスが切れてから、自動起動しなくなって悩んでいて、こちらを見つけました。大変参考になり、感謝です。
    早速使わせて頂きましたが、このままでは startAction = “None” のマシンまで起動してしまいますので、VIMSHの結果の処理を以下のようにしてみました。
    ${VIMSH} -U ${ROOT_USER} ${GET_AUTOSTARTSEQ} | egrep ‘vim.VirtualMachine|startAction’|sed ‘Ns/\(.*\)\n/\1/’|grep PowerOn | grep -o “[0-9]\{1,\}”
    これで、startActionがPowerOnのものだけが起動するはずです。
    ご参考になれば。

    1. > bignumorgさん
      コメントありがとうございます。
      あまり深くは追っていなかったもので、こちらのスクリプトではいろいろと見逃しているところがあったかと思います。
      startActionについて、ご指摘ありがとうございました。
      是非とも参考にさせていただきたく思います。

  2. 初めまして。
    評価ライセンスの期限が切れたとたん、自動起動しないで悩んでいたところ、こちらを見つけました。大変参考になり、助かりました。
    このスクリプトですと、startAction = “None”のマシンまで起動してしまいますので、VIMSHの出力処理を以下のようにしてみました。
    ${VIMSH} -U ${ROOT_USER} ${GET_AUTOSTARTSEQ} | egrep ‘vim.VirtualMachine|startAction’|sed ‘Ns/\(.*\)\n/\1/’|grep PowerOn | grep -o “[0-9]\{1,\}”
    これで、startAction = “PowerOn”のものだけ起動するはずです。
    ご参考になれば幸いです。

  3. はじめまして
    起動時に遅延時間を個別の設定に従うようにしました。
    また、vSphere Clientで立ち上げたVMも同時に落とせるようにしました。
    詳細は、以下のソースを見てください。

    #!/bin/sh
    #——————————————-
    # Copyright (C) 2012 Lunatilia.net
    #
    # ShellID : vmware-autostart.sh
    # Date : 2012/04/30
    # Version : 0.2a
    # Author : Mitsuki Shirase, modified by bignumorg / Iwamoto
    #——————————————-

    #—————————————
    # Define Environment Variable
    #—————————————
    export PATH=/bin:/sbin
    SCRIPT_DIR=$( cd $(dirname $0); pwd )
    VIMSH=/bin/vim-cmd
    ROOT_USER=”root”

    #—————————————
    # Define AutoStartManager commands
    #—————————————
    GET_AUTOSTARTSEQ=”hostsvc/autostartmanager/get_autostartseq”
    GET_DEFAULT=”hostsvc/autostartmanager/get_default”
    GET_STATE=”vmsvc/power.getstate”
    CMD_POWERON=”vmsvc/power.on”
    CMD_SHUTDOWN=”vmsvc/power.shutdown”
    CMD_POWEROFF=”vmsvc/power.off”
    CMD_SUSPEND=”vmsvc/power.suspend”
    CMD_MESSAGE=”vmsvc/message”

    #—————————————
    # Define Work Files
    #—————————————
    AUTORUN_DEF=${SCRIPT_DIR}”/Auto_”$1″_Default.dat”
    AUTORUN_TEMP=${SCRIPT_DIR}”/Auto_”$1″_Temp.dat”
    AUTORUN_SEQ=${SCRIPT_DIR}”/Auto_”$1″_Seq.dat”
    AUTORUN_WORK=${SCRIPT_DIR}”/Auto_”$1″_Work.dat”

    rm #{AUTORUN_DEF}
    rm ${AUTORUN_TEMP}
    rm ${AUTORUN_SEQ}
    rm ${AUTORUN_WORK}

    #——————————————-
    # Make VM List
    #——————————————-
    make_vm_list() {
    ##logger -t “VMware[Auto Start/Stop ]” ” Debug : Starting [make_vm_list]”

    _status=255
    INC=0
    RETRY_MAX=15
    DELAY_TIME=2

    while [ ${_status} -ne 0 ]
    do
    ${VIMSH} -U ${ROOT_USER} ${GET_AUTOSTARTSEQ} > ${AUTORUN_TEMP}
    _status=$?
    if [ ${_status} -ne 0 ]
    then
    INC=`expr ${INC} + 1`
    if [ ${INC} -gt ${RETRY_MAX} ]
    then
    logger -t “VMware[Auto Start/Stop ]” ” get_autostartseq Command Failed ; Retry over ${RETRY_MAX} times”
    break
    fi
    ##logger -t “VMware[Auto Start/Stop ]” ” Debug : get_autostartseq Command Failed RC=${_status} ; Retry after ${DELAY_TIME} second”
    sleep ${DELAY_TIME}
    fi
    done

    if [ ${_status} -ne 0 ]
    then
    logger -t “VMware[Auto Start/Stop ]” ” Command Failed RC=${_status} ; ${GET_AUTOSTARTSEQ}”
    return ${_status}
    fi
    ##logger -t “VMware[Auto Start/Stop ]” ” Debug : Command Normal End ; ${GET_AUTOSTARTSEQ}”

    egrep ‘key|startOrder|Action|Delay’ ${AUTORUN_TEMP} | sed ‘NNNNNs/\n//g ; s/ //g ; s/Guest//g’ > ${AUTORUN_SEQ}

    NUMBER_OF_VMS=$( wc -l ${AUTORUN_SEQ} | grep -o “[0-9]\{1,\}” )
    if [ ${NUMBER_OF_VMS} -lt 1 ]
    then
    logger -t “VMware[Auto Start/Stop ]” ” no VM defined.”
    return 1
    fi
    ##logger -t “VMware[Auto Start/Stop ]” ” Debug : GET_AUTOSTARTSEQ into ${AUTORUN_SEQ}”
    }

    #——————————————-
    # get Default Values
    #——————————————-
    get_default_values() {
    ##logger -t “VMware[Auto Start/Stop ]” ” Debug : Starting [get_default_values]”

    _status=255
    INC=0
    RETRY_MAX=5
    DELAY_TIME=1

    while [ ${_status} -ne 0 ]
    do
    ${VIMSH} -U ${ROOT_USER} ${GET_DEFAULT} > ${AUTORUN_DEF}
    _status=$?
    if [ ${_status} -ne 0 ]
    then
    INC=`expr ${INC} + 1`
    if [ ${INC} -gt ${RETRY_MAX} ]
    then
    logger -t “VMware[Auto Start/Stop ]” ” get_default Command Failed ; Retry over ${RETRY_MAX} times”
    break
    fi
    ##logger -t “VMware[Auto Start/Stop ]” ” Debug : get_default Command Failed RC=${_status} ; Retry after ${DELAY_TIME} second”
    sleep ${DELAY_TIME}
    fi
    done

    if [ ${_status} -ne 0 ]
    then
    logger -t “VMware[Auto Start/Stop ]” ” Command Failed RC=${_status} ; ${GET_DEFAULT}”
    DEF_START_DELAY_TIME=120
    DEF_STOP_DELAY_TIME=120
    DEF_STOP_ACTION=”PowerOff”
    else
    ##logger -t “VMware[Auto Start/Stop ]” ” Debug : Command Normal End ; ${GET_DEFAULT}”
    DEF_START_DELAY_TIME=$( grep startDelay ${AUTORUN_DEF} | grep -o “[0-9]\{1,\}” )
    DEF_STOP_DELAY_TIME=$( grep stopDelay ${AUTORUN_DEF} | grep -o “[0-9]\{1,\}” )
    DEF_STOP_ACTION=$( grep stopAction ${AUTORUN_DEF} | grep -o \”.*\” | grep -o “[^\”]\{1,\}” )
    fi

    ##AUTO_MESSAGE=”StartDelay=${DEF_START_DELAY_TIME} StopAction=${DEF_STOP_ACTION} StopDelay=${DEF_STOP_DELAY_TIME}”
    ##logger -t “VMware[Auto shutdown ]” ” ${AUTO_MESSAGE}”
    }

    #——————————————-
    # Edit Auto Start/Stop VMs Parameter
    #——————————————-
    edit_paramerter() {
    ##logger -t “VMware[Auto Start/Stop ]” ” Debug : Starting [edit_paramerter]”

    VMID=$( echo ${BUF_key} | grep -o “[0-9]\{1,\}” )
    START_DELAY_TIME=$( echo ${BUF_startDelay} | grep -o “[0-9-]\{1,\}” )
    START_ORDER=$( echo ${BUF_startOrder} | grep -o “[0-9-]\{1,\}” )
    START_ACTION=$( echo ${BUF_startAction} | grep -o \”.*\” | grep -o “[^\”]\{1,\}” )
    STOP_DELAY_TIME=$( echo ${BUF_stopDelay} | grep -o “[-0-9]\{1,\}” )
    STOP_ACTION=$( echo ${BUF_stopAction} | grep -o \”.*\” | grep -o “[^\”]\{1,\}” )

    if [ ${VMID} -gt 0 ]
    then
    VM_STATE=$( ${VIMSH} ${GET_STATE} ${VMID} | tail -1 )
    ## ++<>++ ##
    if [ ${START_DELAY_TIME} -lt 0 ]; then
    START_DELAY_TIME=${DEF_START_DELAY_TIME}
    fi
    ## ++<>++ ##
    if [ ${STOP_DELAY_TIME} -lt 0 ]; then
    STOP_DELAY_TIME=${DEF_STOP_DELAY_TIME}
    fi
    ## ++<>++ ##
    if [ ${STOP_ACTION} = “SystemDefault” ]
    then
    STOP_ACTION=${DEF_STOP_ACTION}
    fi
    else
    VM_STATE=”UnDefine”
    fi
    }

    #——————————————-
    # AutoStart VMs
    #——————————————-
    vmware_autostart_vms() {
    ##logger -t “VMware[Auto Startup ]” ” Debug : Starting : [vmware_autostart_vms]”

    grep PowerOn ${AUTORUN_SEQ} > ${AUTORUN_WORK}
    NUMBER_OF_VMS=$( wc -l ${AUTORUN_WORK} | grep -o “[0-9]\{1,\}” )

    if [ ${NUMBER_OF_VMS} -lt 1 ]
    then
    logger -t “VMware[Auto Startup ]” ” Start VM not defined.”
    return
    fi
    logger -t “VMware[Auto Startup ]” ” AutoStart VM Number=${NUMBER_OF_VMS} ”

    INC=0
    while read BUF_key BUF_startOrder BUF_startDelay BUF_startAction BUF_stopDelay BUF_stopAction
    do
    edit_paramerter

    AUTO_MESSAGE=”VMID=${VMID} Order=${START_ORDER} Action=${START_ACTION} Delay=${START_DELAY_TIME}.”
    ##logger -t “VMware[Auto Startup ]” ” Debug : Buffer Values : ${AUTO_MESSAGE}”

    if [ ${VMID} -gt 0 ]
    then
    if [ ${VM_STATE} = “Powered on” ]
    then
    ##AUTO_MESSAGE=” VMID = ${VMID} Delay=${START_DELAY_TIME} State=${VM_STATE}.”
    ##logger -t “VMware[Auto Startup ]” ” Debug : VM Start Skip ; ${AUTO_MESSAGE}”
    continue
    fi
    AUTO_MESSAGE=”VMID=${VMID} Order=${START_ORDER} Delay=${START_DELAY_TIME} State=${VM_STATE}.”
    logger -t “VMware[Auto Startup ]” ” PowerOn VM now ; ${AUTO_MESSAGE}”

    ${VIMSH} ${CMD_POWERON} ${VMID}
    _status=$?
    if [ ${_status} -eq 0 ]
    then
    INC=`expr ${INC} + 1`
    ## ++<>++ ##
    if [ ${START_ORDER} -gt 0 ]
    then
    sleep ${START_DELAY_TIME}
    fi
    else
    logger -t “VMware[Auto Startup ]” ” PowerOn VM Failed RC=${_status} – Skip ; VMID=${VMID}”
    fi
    fi

    done ${AUTORUN_WORK}
    _status=$?
    if [ ${_status} -ne 0 ]
    then
    logger -t “VMware[Auto shutdown ]” ” Reverce Work File Failed RC=${_status}”
    return ${_status}
    fi

    NUMBER_OF_VMS=$( wc -l ${AUTORUN_WORK} | grep -o “[0-9]\{1,\}” )
    if [ ${NUMBER_OF_VMS} -lt 1 ]
    then
    logger -t “Vmware[Auto shutdown ]” ” Stop VM not defined.”
    return
    fi
    logger -t “VMware[Auto shutdown ]” ” Check AutoStop VM Number=${NUMBER_OF_VMS}”

    INC=0
    while read BUF_key BUF_startOrder BUF_startDelay BUF_startAction BUF_stopDelay BUF_stopAction
    do
    edit_paramerter

    ##logger -t “VMware[Auto shutdown ]” ” Debug : Buffer Values : VMID=${VMID} Action=${STOP_ACTION} Delay=${STOP_DELAY_TIME}.”

    if [ ${VMID} -gt 0 ]
    then
    if [ “${VM_STATE}” != “Powered on” ]
    then
    ##AUTO_MESSAGE=”VMID=${VMID} Action=${STOP_ACTION} Delay=${STOP_DELAY_TIME} State=${VM_STATE}.”
    ##logger -t “VMware[Auto shutdown ]” ” Debug : VM Stop Skip ; ${AUTO_MESSAGE}”
    continue
    fi

    AUTO_MESSAGE=”VMID=${VMID} Order=${START_ORDER} Action=${STOP_ACTION} Delay=${STOP_DELAY_TIME} State=${VM_STATE}.”
    case ${STOP_ACTION} in
    “Suspend”)
    logger -t “VMware[Auto shutdown ]” ” Suspend VM now ; ${AUTO_MESSAGE}”
    ${VIMSH} ${CMD_SUSPEND} ${VMID}
    _status=$?
    ;;
    “PowerOff”)
    logger -t “VMware[Auto shutdown ]” ” PowerOff VM now ; ${AUTO_MESSAGE}”
    ${VIMSH} ${CMD_POWEROFF} ${VMID}
    _status=$?
    ;;
    *)
    logger -t “VMware[Auto shutdown ]” ” Shutdown VM now ; ${AUTO_MESSAGE}”
    ${VIMSH} ${CMD_SHUTDOWN} ${VMID}
    _status=$?
    esac

    if [ ${_status} -eq 0 ]
    then
    INC=`expr ${INC} + 1`
    ## ++<>++ ##
    if [ ${START_ORDER} -gt 0 ]
    then
    sleep ${STOP_DELAY_TIME}
    fi
    else
    logger -t “VMware[Auto shutdown ]” ” VM Stop Failed RC=${_status} – Skip ; VMID=${VMID}”
    fi
    fi

    done < ${AUTORUN_WORK}
    logger -t "VMware[Auto shutdown ]" " Stoped VM Number=${INC}"
    }

    #——————————————-
    # Usage
    #——————————————-
    usage() {
    echo "Usage: `basename "$0"` {start|stop|restart}"
    }

    #——————————————-
    # Call function
    #——————————————-

    logger -t "VMware[Auto Start/Stop ]" " Start of $1 Process ; [$0]"
    _status=0

    make_vm_list
    if [ ${_status} -eq 0 ]
    then
    get_default_values

    IFS_SAVE=$IFS
    IFS=,

    case $1 in
    "start")
    vmware_autostart_vms
    ;;
    "stop")
    vmware_autostop_vms
    ;;
    "restart")
    vmware_autostop_vms
    vmware_autostart_vms
    ;;
    *)
    logger -t "VMware[Auto Start/Stop ]" " Invalid Parameter ( $1 ) for $0"
    usage
    _status=1
    esac

    IFS=$IFS_SAVE
    fi

    logger -t "VMware[Auto Start/Stop ]" " End of $1 Process RC=${_status} ; [$0]"
    exit ${_status}

    1. コメントありがとうございます。
      是非参考にさせていただきたく思います。
      また勝手ながら、コメントに載せていただいたソースを、別エントリーの本文に掲載させていただきます。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

ページ先頭へ ↑