Verificar condição duas vezes

1. Verificar condição duas vezes

natha
ncampos

(usa Debian)

Enviado em 25/01/2019 - 10:23h

Bom dia! recente tive ajuda de um colaborador para fazer uma verificação "se existe" com IF, implementei meu script para RSYNC que esta funcionando. Porem precisei incluir mais de um diretório na conferencia.

RESUMO: o Script monta um mapeamento que servira de destino de backup, logo após monta outro mapeamento que sera a origem do backup. Hoje consigo apenas conferir se o destino foi montado. Desejo verificar se o destino e a origem esta OK, antes de iniciar a copia rsync.

parte exemplo meu script:

############################ ORIGEM DO BACKUP ######################
ORIG_BACKUP="//192.168.2.103/copiar_isso/"
USER_ORIG="auser"
SENHA_ORIG="senha"
DEST_ORIG="/mnt/mapeamentos/copiar_isso"

#INICIO DO SCRIPT
echo " Processo iniciado $DIAMESANO as $HORAMINUTO " > $LOG
echo " ---------------------------------------------------------- " >> $LOG

#MONTAGEM DESTINO DO BACKUP
mount -t cifs $DEST_BACKUP $DEST_MAP -o users,username=$USER_DEST,password=$SENHA_DEST >> $LOG 2>> $LOG

#MONTAGEM ORIGEM DO BACKUP
mount -t cifs $ORIG_BACKUP $DEST_ORIG -o users,username=$USER_ORIG,password=$SENHA_ORIG >> $LOG 2>> $LOG

#ANALISA DESTINO DO BACKUP
VERIFICA=$(df -h | awk '{ print $1}' | grep $DEST_BACKUP)

if [ $VERIFICA = $DEST_BACKUP ] ;

then

(rsync -avup --progress --no-perms --no-group --no-owner --links --copy-unsafe-links $DEST_ORIG $DEST_MAP) >> $LOG 2>> $LOG

else

echo "ERRO AO EFETUAR BACKUP DE ($ORIGEM1). " > $ALERTAEMAIL_ERRO



  


2. Re: Verificar condição duas vezes

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 25/01/2019 - 10:35h

V se é isso qie vc quer

if [ $VERIFICA == $DEST_BACKUP ] ;  



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




3. Re: Verificar condição duas vezes

natha
ncampos

(usa Debian)

Enviado em 25/01/2019 - 10:59h

Mauriciodez escreveu:

V se é isso qie vc quer

if [ $VERIFICA == $DEST_BACKUP ] ;  



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------



Ja consigo verificar se o destino do backup esta montaado, porem nao sei como incluir para checar se a Origem do backup foi montada.

como ficaria o IF...


4. Re: Verificar condição duas vezes

Matheus
pylm

(usa Gentoo)

Enviado em 25/01/2019 - 11:04h

Cê pode usar o findmnt pra saber se um diretório é ponto de montagem:


findmnt /sys
TARGET SOURCE FSTYPE OPTIONS
/sys sysfs sysfs rw,nosuid,nodev,noexec,relatime

echo $?
0

findmnt /mnt

echo $?
1


Só checar a variável $?, se o valor for 0 então tá montado e se for 1 não tá.


5. Re: Verificar condição duas vezes

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 25/01/2019 - 12:24h


ncampos escreveu:

Ja consigo verificar se o destino do backup esta montaado, porem nao sei como incluir para checar se a Origem do backup foi montada.

como ficaria o IF...


vc tem que pelo menos nos mostrar o que vc precisa .. tá meio vago

v o que é e nos fala

se origem igual a destino e destino estiver montado faça isso senão faça aquilo 

se origem igual a destino, se destino estiver montado faça isso senão faça aquilo 



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




6. Re: Verificar condição duas vezes

natha
ncampos

(usa Debian)

Enviado em 25/01/2019 - 16:40h

Mauriciodez escreveu:


ncampos escreveu:

Ja consigo verificar se o destino do backup esta montaado, porem nao sei como incluir para checar se a Origem do backup foi montada.

como ficaria o IF...


vc tem que pelo menos nos mostrar o que vc precisa .. tá meio vago

v o que é e nos fala

se origem igual a destino e destino estiver montado faça isso senão faça aquilo 

se origem igual a destino, se destino estiver montado faça isso senão faça aquilo 



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------


minha logica: testar mais de um mapeamento se esta devidamente montado, antes de iniciar a copia Rsyncn...
- Testar a montagem do Disco (destino)
- Testar a montagem do mapeamento (origem da copia)


meu script.

#!/bin/bash
DIAMESANO=$(date +"%d/%m/%Y")
HORAMINUTO=$(date +"%Hh%M:%S")

CLIENTE1='(teste)'

############################ VARIAVEL DE MONTAGEM DE DISCO ######################
ORIGEM_MONTAGEM="/dev/sdb1"
DESTINO_MONTAGEM="/mnt/hd_backup/"

# DIRETORIOS A SINCRONIZAR
ORIGEM1='/mnt/mapeamentos/server2012/Publico'
DESTINO1="/mnt/hd_backup/server2012/"
LOG="/home/logs/backup_server2012.txt"

#INICIO DO SCRIPT
echo " Processo iniciado $DIAMESANO as $HORAMINUTO " > $LOG
echo " ---------------------------------------------------------- " >> $LOG

#MONTAGEM DE DISCO
mount -t auto $ORIGEM_MONTAGEM $DESTINO_MONTAGEM >> $LOG 2>> $LOG

#MONTAGEM DO MAPEAMENTO1
mount -t cifs //192.168.3.100/Publico /mnt/mapeamentos/server2012/Publico -o users,username=admin,password=123! >> $LOG 2>> $LOG

#ANALISA MONTAGEM DISCO
VERIFICA=$(df -h | awk '{ print $1}' | grep $ORIGEM_MONTAGEM) >> $LOG 2>> $LOG

#ANALISA MONTAGEM MAPEAMENTO1
VERIFICA2=$(df -h | awk '{ print $1}' | grep $ORIGEM1) >> $LOG 2>> $LOG


if [ $VERIFICA = $ORIGEM_MONTAGEM ] || [ $VERIFICA2 = $ORIGEM1 ];

then

(rsync -avup --delete --progress --no-perms --no-group --no-owner --links --copy-unsafe-links $ORIGEM1 $DESTINO1) >> $LOG 2>> $LOG

echo " ----------------------------------------" >> $LOG
echo " Backup finalizado $DIAMESANO as $HORAMINUTO." >> $LOG

#Procura informacoes no log
cat $LOG | egrep "rsync error:|@ERROR:|getaddrinfo:|error starting client-server protocol " >> $ALERTAEMAIL

#COPIA DO LOG AO DESTINO
cp -r $LOG $DESTINO1

sendEmail -f $REMETENTE -t $DESTINATARIO -u $ASSUNTO -m < $ALERTAEMAIL -a $LOG -s $SRV_SAIDA:$PORTA -o tls=yes -xu $REMETENTE -xp $SENHA

#remove log de email
rm -rf $ALERTAEMAIL

else

echo "ERRO AO EFETUAR BACKUP DE ($ORIGEM1). " > $ALERTAEMAIL_ERRO
echo " ---------------------------------------------------------- " >> $LOG
echo " A UNIDADE NAO ESTA MONTADA, NAO FOI POSSIVEL EXECUTAR BACKUP - VERIFIQUE OS LOGS" >> $LOG
echo " " >> $LOG
echo " Processo finalizado $DIAMESANO as $HORAMINUTO " >> $LOG

cat $LOG | egrep "rsync error:|@ERROR:|failed to connect|getaddrinfo:|error starting client-server protocol" >> $ALERTAEMAIL_ERRO

sendEmail -f $REMETENTE -t $DESTINATARIO -u $ASSUNTO_ERRO -m < $ALERTAEMAIL_ERRO -a $LOG -s $SRV_SAIDA:$PORTA -o tls=yes -xu $REMETENTE -xp $SENHA

#remove log de email
rm -rf $ALERTAEMAIL
rm -rf $ALERTAEMAIL_ERRO


fi



7. Re: Verificar condição duas vezes

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 25/01/2019 - 20:35h

campeão, fiz um exemplo aqui, vc adapta ao seu modo.

OR="/mnt/Origem"
DE="/mnt/Destino

if [ -e $OR -a -e $DE ];then
echo "Montados"
else
echo "Não Montados"
fi


Verifica se as Variáveis $OR e (-a) $DE existem (-e) ...

NOTA: Quanto for postar código, poste ente as tags [ code ] [ / code ], que tem por atalho </> !!!

Se não for isso tente explicar de novo !!!


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




8. Re: Verificar condição duas vezes

Matheus
pylm

(usa Gentoo)

Enviado em 25/01/2019 - 20:41h


Mauriciodez escreveu:

campeão, fiz um exemplo aqui, vc adapta ao seu modo.

OR="/mnt/Origem"
DE="/mnt/Destino

if [ -e $OR -a -e $DE ];then
echo "Montados"
else
echo "Não Montados"
fi


Verifica se as Variáveis $OR e (-a) $DE existem (-e) ...

NOTA: Quanto for postar código, poste ente as tags [ code ] [ / code ], que tem por atalho </> !!!

Se não for isso tente explicar de novo !!!


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------



Qual a moral desse -e no teste? Não consegui achar a serventia dele.



9. Re: Verificar condição duas vezes

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 25/01/2019 - 20:43h


ncampos escreveu:

Mauriciodez escreveu:


ncampos escreveu:

Ja consigo verificar se o destino do backup esta montaado, porem nao sei como incluir para checar se a Origem do backup foi montada.

como ficaria o IF...


vc tem que pelo menos nos mostrar o que vc precisa .. tá meio vago

v o que é e nos fala

se origem igual a destino e destino estiver montado faça isso senão faça aquilo 

se origem igual a destino, se destino estiver montado faça isso senão faça aquilo 



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------


minha logica: testar mais de um mapeamento se esta devidamente montado, antes de iniciar a copia Rsyncn...
- Testar a montagem do Disco (destino)
- Testar a montagem do mapeamento (origem da copia)


meu script.

#!/bin/bash
DIAMESANO=$(date +"%d/%m/%Y")
HORAMINUTO=$(date +"%Hh%M:%S")

CLIENTE1='(teste)'

############################ VARIAVEL DE MONTAGEM DE DISCO ######################
ORIGEM_MONTAGEM="/dev/sdb1"
DESTINO_MONTAGEM="/mnt/hd_backup/"

# DIRETORIOS A SINCRONIZAR
ORIGEM1='/mnt/mapeamentos/server2012/Publico'
DESTINO1="/mnt/hd_backup/server2012/"
LOG="/home/logs/backup_server2012.txt"

#INICIO DO SCRIPT
echo " Processo iniciado $DIAMESANO as $HORAMINUTO " > $LOG
echo " ---------------------------------------------------------- " >> $LOG

#MONTAGEM DE DISCO
mount -t auto $ORIGEM_MONTAGEM $DESTINO_MONTAGEM >> $LOG 2>> $LOG

#MONTAGEM DO MAPEAMENTO1
mount -t cifs //192.168.3.100/Publico /mnt/mapeamentos/server2012/Publico -o users,username=admin,password=123! >> $LOG 2>> $LOG

#ANALISA MONTAGEM DISCO
VERIFICA=$(df -h | awk '{ print $1}' | grep $ORIGEM_MONTAGEM) >> $LOG 2>> $LOG

#ANALISA MONTAGEM MAPEAMENTO1
VERIFICA2=$(df -h | awk '{ print $1}' | grep $ORIGEM1) >> $LOG 2>> $LOG


if [ $VERIFICA = $ORIGEM_MONTAGEM ] || [ $VERIFICA2 = $ORIGEM1 ];

then

(rsync -avup --delete --progress --no-perms --no-group --no-owner --links --copy-unsafe-links $ORIGEM1 $DESTINO1) >> $LOG 2>> $LOG

echo " ----------------------------------------" >> $LOG
echo " Backup finalizado $DIAMESANO as $HORAMINUTO." >> $LOG

#Procura informacoes no log
cat $LOG | egrep "rsync error:|@ERROR:|getaddrinfo:|error starting client-server protocol " >> $ALERTAEMAIL

#COPIA DO LOG AO DESTINO
cp -r $LOG $DESTINO1

sendEmail -f $REMETENTE -t $DESTINATARIO -u $ASSUNTO -m < $ALERTAEMAIL -a $LOG -s $SRV_SAIDA:$PORTA -o tls=yes -xu $REMETENTE -xp $SENHA

#remove log de email
rm -rf $ALERTAEMAIL

else

echo "ERRO AO EFETUAR BACKUP DE ($ORIGEM1). " > $ALERTAEMAIL_ERRO
echo " ---------------------------------------------------------- " >> $LOG
echo " A UNIDADE NAO ESTA MONTADA, NAO FOI POSSIVEL EXECUTAR BACKUP - VERIFIQUE OS LOGS" >> $LOG
echo " " >> $LOG
echo " Processo finalizado $DIAMESANO as $HORAMINUTO " >> $LOG

cat $LOG | egrep "rsync error:|@ERROR:|failed to connect|getaddrinfo:|error starting client-server protocol" >> $ALERTAEMAIL_ERRO

sendEmail -f $REMETENTE -t $DESTINATARIO -u $ASSUNTO_ERRO -m < $ALERTAEMAIL_ERRO -a $LOG -s $SRV_SAIDA:$PORTA -o tls=yes -xu $REMETENTE -xp $SENHA

#remove log de email
rm -rf $ALERTAEMAIL
rm -rf $ALERTAEMAIL_ERRO


fi

Boa noite, se entendi corretamente, vc deseja testar duas condições, e se, ambas forem satisfeitas, executar o "rsync".
Sugestões:
1 Com essas variáveis, no log, o HORÁRIO do fim será igual ao do inicio.
Fácil de resolver....

2 Otimize os comandos para a obtenção das variáveis:
VERIFICA=$(awk '$1~/'${ORIGEM_MONTAGEM}'/ {print $1}' <<< $(df -h))
VERIFICA2=$(awk '$1~/'${ORIGEM1}'/ {print $1}' <<< $(df -h))

3 Otimize o condicional....
Se "$VERIFICA" foi gerado a partir da var $ORIGEM_MONTAGEM, não vejo a real necessidade de fazer a comparação,
o mesmo ocorre com a segunda comparação....
No lugar de:
if [ $VERIFICA = $ORIGEM_MONTAGEM ] || [ $VERIFICA2 = $ORIGEM1 ];
Use:
#Note que usei o "OPERADOR LÓGICO " "&&", assim a ação é executada se as duas condições forem verdadeiras.
if [ "$VERIFICA" ] && [ "$VERIFICA2" ];then
#Execute o rsync.....

echo " Backup finalizado $DIAMESANO as $HORAMINUTO." >> $LOG
else

fi

É Isso....
Marcelo Oliver


10. Re: Verificar condição duas vezes

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 25/01/2019 - 20:45h


pylm escreveu:
Qual a moral desse -e no teste? Não consegui achar a serventia dele.


é o teste da existência uai .. -e arquivo ou path ... se existir é pq está montado, quando não está montado o path não aparece !!!

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




11. Re: Verificar condição duas vezes

Matheus
pylm

(usa Gentoo)

Enviado em 25/01/2019 - 20:53h


Mauriciodez escreveu:


pylm escreveu:
Qual a moral desse -e no teste? Não consegui achar a serventia dele.


é o teste da existência uai .. -e arquivo ou path ... se existir é pq está montado, quando não está montado o path não aparece !!!

------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------



Mas aí ele dá positivo mesmo que só um dos diretórios esteja montado, saca só:


> sh script
Montados

~
> ls /mnt/droid

~
>



E o conteúdo do script:


OR="/sys"
DE="/mnt/droid"

if [ -e $OR -a -e $DE ];then
echo "Montados"
else
echo "Não Montados"
fi


No caso o /sys tá montado mas o /mnt/droid é só uma pasta vazia.
Então nesse caso creio que o ideal seria usar o findmnt pro teste:

[code]
> findmnt /mnt/droid

~
> findmnt /sys
TARGET SOURCE FSTYPE OPTIONS
/sys sysfs sysfs rw,nosuid,nodev,noexec,relatime
[/code

Já que ele consegue efetivamente dizer se tem algum fs montado na pasta.


12. Re: Verificar condição duas vezes

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 25/01/2019 - 21:10h


pylm escreveu:
Mas aí ele dá positivo mesmo que só um dos diretórios esteja montado, saca só:
.


VC está certinho ... o que aconteceu foi que fiz aqui com os discos montando em /media e no fórum alterei para /mnt, não me atentei que o comportamento é diferente.

v aí

 
OR="/media/mauricio/Origem";DE="/media/mauricio/Destino";if [ -e $OR -a -e $DE ];then echo "Montados"; else echo "Não Montados";fi



------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------





01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts