PDA

Visualizza la versione completa : shell scripting: controllo su output comando


mardux
27-02-2008, 14:50
ciao a tutti.

ho la necessità di implementare 3 operazioni (attualmente separate) in un'unico script per poi pianificarle tramite cron.

l'ambiente è il seguente:

2 host suse (host1 e host2) identici con vmware server e 3 macchine virtuali attive o sull'host1 o sull'host2. uno dei 2 host funge da backup dell'altro.

io dovrei, tramite shell, stoppare la macchina virtuale, copiarla sull'altro host, e farla ripartire.

questo già lo faccio, ma appunto tramite 3 script separati, che adesso vorrei unire:

il primo comando è questo, e stoppa la macchina virtuale:
gpvm01:/ # vmware-cmd /var/lib/vmware/virtual/Zabbix-1.3.8-ubuntu/Ubuntu.vmx stop hard
e questa la risposta:
stop(hard) = 1

poi il comando di copia ma quello è ok.

il terzo comando, quello che fa ripartire la macchina:
gpvm01:/ # vmware-cmd /var/lib/vmware/virtual/Zabbix-1.3.8-ubuntu/Ubuntu.vmx start
e questa è la risposta:
start() = 1


il punto è questo:


per andare avanti con il secondo comando, quello della copia, vorrei che prima si controllasse la risposta del primo comando di stop. se è 1, come dev'essere, vai avanti, se no fermati.

io non so come prendere quel valore in una variabile, fare il controllo e quindi andare avanti.

spero di essere stato chiaro e che qualcuno possa aiutarmi.

grazie in anticipo

menphisx
27-02-2008, 18:52
s=`vmware-cmd /var/lib/vmware/virtual/Zabbix-1.3.8-ubuntu/Ubuntu.vmx stop hard | cut -d'=' -f2`
if [[ $s == "1" ]]
then
#blabla
else
#blabla
fi

mardux
28-02-2008, 09:41
grazie. fà proprio al caso mio e ottengo quello che cercavo.

scusa ma ne approfitto delle tue conoscenze e provo a porti un'altro quesito:

la copia attualmente avviene via SSH.

il problema è che lanciano l'attuale script di copy, questo per andare avanti chiede la password, per la precisione 3 volte.

una per il check dei file sul sistema remoto sul quale fare la copia, una per eliminare quei file se ci fossero, ed una per effettuare l'effettiva copia.

questo è lo script:


DEBUG=
VM_ROOT_FOLDER="/var/lib/vmware/virtual"
VM_USERNAME=root
VM_HOST=gpvm02
RM_COMMAND=/bin/rm
LIST_FILES='ls -1 '
CHECK_NUM='cut -f2 -d \" \"'
FILES_NUMBER=0

function check_error(){

if [ $1 -eq 0 ]
then
echo "$2 completed"
else
echo "$2 error"
exit $1
fi
}


case $? in
0)vmpaths="Zabbix-1.3.8-ubuntu"
VM_FULL_PATH=${VM_ROOT_FOLDER}/${vmpaths}
if [ -d ${VM_FULL_PATH} ]
then
echo "Check if there are files in ${VM_FULL_PATH}"
if [ $(ssh ${VM_USERNAME}@${VM_HOST} "${LIST_FILES} ${VM_FULL_PATH}"|wc -l) -gt 0 ]
then
echo "Now deleting ${VM_FULL_PATH}/*"
${DEBUG} ssh ${VM_USERNAME}@${VM_HOST} "${RM_COMMAND} ${VM_FULL_PATH}/*"
check_error $? delete
else
echo "No files to delete in ${VM_FULL_PATH}"
fi
echo "Now copying ${VM_FULL_PATH}/*"
${DEBUG} scp -rp ${VM_FULL_PATH} ${VM_USERNAME}@${VM_HOST}:${VM_ROOT_FOLDER}
check_error $? copy
fi;;
1)exit;;
esac


mi chiedevo se era possibile passare anche la password via variabile, come per l'utente e l'host:

VM_USERNAME=root
VM_HOST=gpvm02

in modo che non mi chieda più la password e che possa fare tutto da solo.
premetto che può passare anche in chiaro la password, non ho queste limitazioni


grazie 1000 per l'aiuto

menphisx
28-02-2008, 14:46
Dovrebbe essere qualcosa del tipo:


pass="password"
echo $pass | sudo -S comando


per eseguire comando come root senza che richieda la password.

:ciauz:

mardux
29-02-2008, 12:29
ok. risolto in modo pulito tramite chiavi.

qui la soluzione se può essere utile a qualcuno:

http://www.tek-tips.com/viewthread.cfm?qid=1347561&page=1

praticamente configurando l'autenticazione SSH tra 2 macchine tramite chiavi, non chiede più la password, e quindi si può implementare in script schedulati o simili.

cmq grazie a menphisx.

:ciauz:

Loading