brlink-org / bckp-mikrotik-email-telegram.sh

Sehll/Bash Script de Backup do Mikrotik que envia por E-mail e para o Telegram
0 stars 0 forks source link

Conectar o Mikrotik via SSH e realizar backup #2

Closed brlink-org closed 1 year ago

brlink-org commented 1 year ago

Fazer o script para conectar-se o Mikrotik via SSH e realizar backup.

brlink-org commented 1 year ago

Não resolveu o problema, não há tratamento de erro caso falhe ao conectar via ssh.

cirinho commented 1 year ago

Verifiquei que o script fica lento pois o comando /export pode durar algum tempo e elevar a CPU a 100% especialmente em RB com pouco hardware, como por exemplo hAP lite.

Como sugestão não seria melhor o script apenas baixar um arquivo já pré existente ?

cirinho commented 1 year ago

o comando print é executado no mk então vamos armazenar o resultado do comando de saída em uma variável

# Verificar se o arquivo existe no Mikrotik
IFILE_MK=$(sshpass -p $MK_PASS ssh $MK_USER@$MK_IP "file print where name=$MK_BCKP_FILE")
if [ -z "$IFILE_MK" ]; then
  echo "Erro: arquivo não encontrado no Mikrotik"
  exit 1
fi
cirinho commented 1 year ago

https://github.com/brlink-org/bckp-mikrotik-email-telegram.sh/blob/e6c3c3e77f61df61e8b47e53dc779ae48e4187b5/bckp-mikrotik-email-telegram.sh#L20-L25

Muitos erros nos testes ao tentar verificar se o arquivo existe, retorna sempre o primeiro caractere do comando print mesmo tentando depurar

# Verifica se o arquivo existe no Mikrotik
IFILE_MK=$(sshpass -p $MK_PASS ssh $MK_USER@$MK_IP "file print where name=$MK_BCKP_FILE" | awk 'NR>=2 {print $2}')

# Exibe o resultado do comando file print
echo "Resultado do comando file print:"
echo "$IFILE_MK"

# Exibe o valor da variável IFILE_MK
echo "Valor da variável IFILE_MK antes da verificação: $IFILE_MK"

# Verifica se o comando file print retornou pelo menos duas linhas
if [ "$(wc -l <<< "$IFILE_MK")" -ge 2 ]; then
  # Pega o nome do arquivo da segunda linha
  IFILE_MK=$(awk 'NR==2 {print $2}' <<< "$IFILE_MK")
fi

# Exibe o valor da variável IFILE_MK
echo "Valor da variável IFILE_MK depois da verificação: $IFILE_MK"

# Compara o nome do arquivo com o nome esperado
if [ "$IFILE_MK" != "$MK_BCKP_FILE" ]; then
  echo "Erro: arquivo não encontrado no Mikrotik"
  exit 1
fi
cirinho commented 1 year ago

Melhor voltar um passo atrás e remover esta verificação se o existe no mikrotik, partindo do pressuposto que ele exista para tornar o script novamente funcional.

cirinho commented 1 year ago

Retomar futuramente com algo do tipo:

# Verifica se o arquivo existe no Mikrotik
IFILE_MK=$(sshpass -p $MK_PASS ssh $MK_USER@$MK_IP "file print where name=$MK_BCKP_FILE" | grep "$MK_BCKP_FILE")
if [ -z "$IFILE_MK" ]; then
echo "Erro: arquivo não encontrado no Mikrotik"
exit 1
fi
cirinho commented 1 year ago

Necessário fazer as verificações e tratamento de possíveis erros, porém nos testes realizados o script está funcional.