2011-02-23 3 views
3

저는 Ubuntu 10.10에서 VMWare Workstation을 실행하고 있습니다. 매주 복제 할 일련의 가상 시스템이 있습니다.VMware 가상 컴퓨터가 명령 줄에서 다시 시작하지 않습니다.

각 가상 머신을 순환하고 부드럽게 일시 중단하고 복제 한 다음 다시 시도하는 bash 스크립트를 작성했습니다.

문제는 VM이 ​​다시 시작되지 않기 때문에 수동으로 다시 시작해야한다는 것입니다. VM을 다시 시작하도록 작성한 스크립트를 어떻게 수정할 수 있는지 알아 내려고합니다. 나는 스크립트와 오류 메시지를 보여주는 생성 된 로그 파일의 샘플을 포함시켰다.

#!/bin/bash 

##Author: William Cooper 
##Date: 2/15/2011 
## Purpose:  Perform full backups of Virtual Machines 
##  Running under VMWare Workstation 

## Script won't run if the /nas directory doesn't exist 
## The /nas directory is a mounted Buffalo Terastation 
## Check /etc/fstab if this mountpoint is broken 
    BACKUPDEST="/nas" 

## No need to modify 
    HOST=`hostname` 
    DATEFILE=`/bin/date +%G%m%d` 

## Run Command to find list of VM names: 
## this will only be the name of the vm, no path and no .vmx 
    VMLIST=`vmrun list | grep '/' | cut -d'/' -f3 | cut -d'.' -f1` 

## Initialize Counter variable used to cycle through VMs in VMARRAY variable 
    COUNTER=1 

## Run Command to find list of VM Names and then store them in an Array: 
## This will include full pathnames 
    VMARRAY=(`vmrun list | grep '/'`) 

################################################################# 
## Functions 

## 
## Notify the starting time of backup in the log 
## 
function startScript { 
    echo 
    echo "----------------------------------------------------" 
    echo "START - ${VM}" 
    echo "Host: ${HOST}" 
    echo "Date: `date`" 
    echo 
} 

## 
## Suspend VM 
## 
function suspendVM { 
    ## Suspend the VM 
    echo "Attempting to softly suspend "${VM}" . . ." 
    vmrun suspend ${VMARRAY[${COUNTER}]} soft 
    echo "${VM} Suspended on `date`" 
    echo 
} 

## 
## Backup VM 
## 
function doBackup { 

    ## Check to see if the correct backup directory exists. 
    if [ ! -d ${BACKUPDEST}/${VM} ]; then 
     echo "${BACKUPDEST}/${VM} does not exist, creating . . ." 
     mkdir "${BACKUPDEST}/${VM}" 
     echo 
    fi 

    ## Backup VM (clone) 
    echo "Backup of "${VM}" began: `date`" 
    echo "Backup to ${BACKUPDEST}/${VM}/BACKUP/${DATEFILE} . . ." 
    mkdir ${BACKUPDEST}/${VM}/BACKUP/${DATEFILE} 
    vmrun clone ${VMARRAY[${COUNTER}]} ${BACKUPDEST}/${VM}/BACKUP/${DATEFILE}/${VM}.vmx full 
    echo "Backup of "${VM}" ended: `date`" 
    echo 
} 

## 
## Start VM 
## 
function doStart { 
    ## Resume VMs which were running [--type gui|sdl|vrdp|headless] 
    echo "Attempting to resume "${VM}" . . ." 
    vmrun start ${VMARRAY[${COUNTER}]} 
    echo "${VM} Resumed on `date`" 
    echo 
} 

## 
## Notify the finishing time of backup in the log 
## 
function finishScript { 
    echo "FINISH - ${VM}" 
    echo "Host: ${HOST}" 
    echo "Date: `date`" 
    echo "----------------------------------------------------" 
    echo 
} 

################################################################# 
## Script 

for VM in ${VMLIST} 
do 

    sleep 1 
    ## StartScrip executes for logging 
     startScript 

    ## Suspend VM performs soft suspend 
     suspendVM 
     sleep 3 

    ## Do Backup performs the VM clone 
     doBackup 
     sleep 3 

    ## Start VM performs start vm 
     doStart 
     sleep 3 

    ## FinishScript executes for logging 
     finishScript 

    ## Increment the Counter 
     COUNTER=${COUNTER}+1 

done | tee "${BACKUPDEST}/logs/VMClone_${DATEFILE}.log" 

## Script 
################################################################# 
exit 

각 VM에 대해 생성 된 로그 파일의 예가 아래에 나와 있습니다.

---------------------------------------------------- 
START - vmname 
Host: servername 
Date: Sat Feb 19 12:30:29 CST 2011 

Attempting to softly suspend vmname . . . 
vmname Suspended on Sat Feb 19 12:30:44 CST 2011 

Backup of vmname began: Sat Feb 19 12:30:47 CST 2011 
Backup to /nas/vmname/BACKUP/20110219 . . . 
Backup of vmname ended: Sat Feb 19 12:43:16 CST 2011 

Attempting to resume vmname . . . 
Error: Cannot launch the UI because no display server is present in the current environment 
vmname Resumed on Sat Feb 19 12:43:20 CST 2011 

FINISH - vmname 
Host: servername 
Date: Sat Feb 19 12:43:23 CST 2011 
---------------------------------------------------- 

오류 : 고체 대답은 그냥 이러한 특정 상황에서 어떤 수정이 없음을 받아들이려고 발견되지 않았기 때문에 어떤 디스플레이 서버가 현재 환경

+1

귀하의 카운터 증가는 종류의 부작용의 방법으로 작동합니다. 'COUNTER = $ {COUNTER} + 1'을 할 때'1 + 1 + 1 + 1 + 1' 형태의 점차 길어지는 문자열을 만들어서 배열 첨자로 사용할 때 산술적으로 평가됩니다. 대신'((COUNTER ++))'를 사용하는 것이 좋습니다. 또한 배열 첨자에 대한 모든 장식이 필요하지 않습니다. '$ {VMARRAY [COUNTER]}'를 사용할 수 있습니다. 또한 명령 대체를 위해 백틱 대신'$()'를 사용하는 것이 좋습니다. 더 읽기 쉽고 더 쉽게 중첩 될 수 있습니다. 질문에 관해서는 환경에 대한 자세한 정보를 제공 할 수 있습니까? –

+1

X11이 실행되어야하고'DISPLAY' 변수는 의미있는 값을 가져야합니다. –

+0

'((COUNTER ++)) '에 대한 조언을 주셔서 감사합니다.'$()'는 실제로 더 깨끗 해졌다.하지만 코드 정리 제안을 제외하고 나는 왜 DISPLAY 전역이 깨지는지 확신하지 못한다. 매주 토요일에 위의 스크립트를 호출하는 cronjob을 실행합니다. 이제 스크립트에서 수동으로'DISPLAY = : 0.0'을 수동으로 설정하여 문제가 해결되는지 확인하려고합니다. 감사. – Lucretius

답변

0

에 존재하지 않기 때문에 UI를 시작할 수 없습니다 .

  • 우분투 10.10 64
  • VM웨어 워크 스테이션 7

해결 방법 : VM을위한 VM웨어 워크 스테이션을 닫고 선택에 그 후 완벽하게 작동 "실행 백그라운드에서".

11

당신은 시작 명령에 nogui의 paramater, 예컨대을 사용할 수

vmrun start yourmachine.vmx nogui 

참조 : http://www.vmware.com/pdf/vix180_vmrun_command.pdf

+0

우분투의 워크 스테이션 7에서는이 매개 변수를 무시한 것 같습니다. 내가 그것을 추가했을 때, 그것은 아무런 차이를 만들지 않았다. 우리는 이후 vSphere 및 ESXi 5.0을 도입했습니다. 도움이되는 대답. – Lucretius

+1

nogui는 VM웨어 워크 스테이션 8.02에서 작동합니다. – Floyd

0

곳 VM웨어 워크 스테이션 실행 터미널 TTY에 에코 $ 표시를하고보십시오. echo $ DISPLAY는 다음과 같이 반환됩니다. 1000.0 스크립트에 export DISPLAY = ": 1000.0"을 설정해야합니다. 그때 스크립트는 VM의를 다시 시작합니다. Areca에서 실행되는 포스트 스크립트를 사용하여 VM을 재개하기 위해 areca 백업을 사용할 때이 기능이 작동합니다.

0

ssh 세션에서 vmrun을 실행하고 있기 때문에 문제가 발생한 경우 다른 솔루션에서 서버의 화면 세션을 실행할 수 있습니다. 컴퓨터 워크 스테이션에

가 실행되고 :

클라이언트 시스템에
screen -S vmware 

,

ssh vmware-machine 
screen -x vmware 
vmrun start /path/to/vm.vmx