Rsync Sair do verificador de código - Bash

1

Eu tenho um script simples no meu servidor doméstico para sincronizar dados para a minha unidade de backup para ser armazenado.

Agora, ele executa vários rsyncs um após o outro.

Às vezes, o rsync falha em um ou dois deles. Quando isso acontece, quero que ele me mande um e-mail dizendo que falhou, eu já enviei um relatório por e-mail, mas quero saber se ele falha.

Se o Rsync sair com um código diferente de 0, significa falha. Então, eu precisaria de um pouco de código para verificar o status do rsync e se não for 0, permita-me executar uma ação.

Alguém tem alguma dica de como eu conseguiria isso? Obrigado.

    
por Marcos Sander 03.02.2013 / 04:24

3 respostas

5

Basicamente, você quer usar a variável $? . Esta variável contém o status de retorno do último comando de execução.

% /bin/false
% echo $?
1
% /bin/true
% echo $?
0

Você pode usar essas construções para executar rsync e enviar-lhe mensagens se obtiver êxito (eco true) ou enviar a você um email se ele falhar (eco falso).

% /bin/false && echo true || echo false
false
% /bin/true && echo true || echo false
true

Algo parecido com isto:

% rsync \
    && (echo "succeed" | mail -s "succeed" <email>) \
    || (echo "failure" | mail -s "failure" <email>)
    
por 03.02.2013 / 06:44
1

para usar no script, eu prefiro essa construção universal:

check_exit_code() {
    exit_code=$?
    if [ "$exit_code" -ne "0" ] ; then
        echo "$1"
        echo "exit with exitcode $exit_code"
        return 1
    fi
}

 myCommand
 check_exit_code "smth failed"

Você pode adicionar usando o sendmail nesta função ou adicionar MAILTO no seu crontab

    
por 13.11.2014 / 12:34
0

Uma sugestão / otimização para preceder respostas:

Se for crucial, eu faço o script confirmar um OK em vez de uma falha, por exemplo, com um

wget "http://yourpage.com/callhome.php?device_id=xxx"

e deixe que o servidor da Web lide com a verificação se não houver nenhuma chamada inicial. (a primeira entrada do banco de dados com a chamada wget, depois o cron checa se havia uma entrada para aquela máquina) e reage de qualquer / muitas formas (mail, sms / text, ...)

porque existem muitas razões pelas quais um email nunca atinge seu alvo. É muito mais trabalho, eu concordo ...

    
por 15.01.2015 / 21:11

Tags