From f9532a0cb21047807f8abb61c4198412f955121f Mon Sep 17 00:00:00 2001 From: Bruno Silva Tosta Date: Mon, 23 Sep 2024 09:23:14 -0300 Subject: [PATCH] Enviar arquivos para "/" --- backup | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 backup diff --git a/backup b/backup new file mode 100644 index 0000000..264dc3e --- /dev/null +++ b/backup @@ -0,0 +1,166 @@ +#!/bin/bash +# ┌──────────────────────────────────────────────────────────┐ +# │ Author: Bruno.Tosta │ +# │ Desc: Realiza o backup do banco de dados │ +# └──────────────────────────────────────────{ CONFIGURACAO }┘ +VERSAO="2.1" + +FINALIZAR='0' +# "0" = Finalizar | "1" = Reiniciar | "2" = Desligar +# ┌──────────────────────────────────────────────────────────┐ +# └─────────────────────────────────────────────{ VARIAVEIS }┘ +REPOSITORIO='download.sigsolucoes.net.br/public/Tosta/ERP' +DIR_ORIGEM='/backup/diario/Dropbox' +DIR_DESTINO='backup:' +DIRETORIO=$(date '+%A') +VERDE='\033[32;1m' +AMARELO='\033[33;1m' +VERMELHO='\033[31;1m' +RESET=$(tput 'sgr0') +LOG="$(date '+%m%Y')" +ARQUIVO_LOG="/tmp/rclone-$LOG.log" +MENSAGEM_LOG="#$(date '+%A, %d %B %Y')#" +MENU=" [ -OPÇÃO ] + -a Armazenamento + -c Checar + -C Configurar + -i Informacao + -l Listar + -s Sincronizar + -u Atualizar rclone + -U Atualizar script + -v Verificar + -V Versão do script + -h Ajuda deste menu" +# ┌──────────────────────────────────────────────────────────┐ +# └─────────────────────────────────────────────────{ TESTE }┘ +Testar(){ + rclone --version 2>'/dev/null' | head -1 | grep -q 'rclone v1.67.0' && echo -e "${VERDE}Está atualizado! \n" $RESET || { + wget -q --show-progress -O '/tmp/rinstall' "$REPOSITORIO/instaladores/rclone"; chmod 755 '/tmp/rinstall'; /tmp/./rinstall + } +} +# ┌──────────────────────────────────────────────────────────┐ +# └───────────────────────────────────────────────{ FUNCOES }┘ +Configurar(){ + rclone config; +} +Informacao(){ + rclone about "$DIR_DESTINO"; +} +Listar(){ + rclone tree "$DIR_DESTINO"; +} +Verificar(){ +[ -e "$DIR_ORIGEM/" ] && echo "$DIR_ORIGEM/ existe" || { + mkdir -p "$DIR_ORIGEM/" + [ -e '/home/caixa/' ] && chown -R caixa:caixa '/backup' + [ -e '/home/sig' ] && chown -R sig:sig '/backup' + [ ! -e '/home/caixa/' ] && [ ! -e '/home/sig' ] && echo "${VERMELHO}Não existe usuário 'caixa' ou 'sig' neste computador${RESET}" + chmod -R 777 '/backup' + } +} +Realizar(){ + SENHA=$(grep db_password '/etc/openerp-server.conf' | awk '{print $3}') + QUANTIDADE=$(PGPASSWORD="$SENHA" psql -U 'openerp' -l | awk '{ if ($3 == "openerp") print $1 }' | wc -l) + cd "$DIR_ORIGEM" && rm -rf "$DIRETORIO.tar.gz" + mkdir $DIRETORIO + for ((N=1; N < $(($QUANTIDADE+1)); N++)) do + BASE=$(PGPASSWORD="$SENHA" psql -U 'openerp' -l | awk '{ if ($3 == "openerp") print $1 }' | head -$N | tail -1) + printf "\n${VERDE}Quantidade: $N \nBase: $BASE \n${RESET}" + PGPASSWORD="$SENHA" pg_dump -h 'localhost' -p '5432' --role 'openerp' -U 'openerp' -F 'custom' -b -v -T 'logs_logs' -T 'ir_attachment' -T 'logs_detalhe' -T 'ecf_exportar_osv_id_seq' -f "$DIR_ORIGEM/$DIRETORIO/$BASE.dump" "$BASE" + done + tar cfvz "$DIRETORIO.tar.gz" "$DIRETORIO" && chmod 777 "$DIRETORIO.tar.gz"; rm -rf "$DIRETORIO" +} +HealthCheck(){ + ESPACO=$(du -sm "$DIR_ORIGEM/$DIRETORIO.tar.gz" | awk '{print $1}') +[[ "$ESPACO" -gt 3 ]] && echo -e "\n${VERDE}O backup foi concluído com sucesso. \n${RESET}" || { + printf "\n${VERMELHO}O backup do banco de dados não foi realizado, verifique os parametros. \n${RESET}"; exit 1 +} +} +Gerenciar(){ + TOTAL=$(echo "$(rclone about "$DIR_DESTINO" | awk '{print $2}'| head -1) * 1028" | bc) +while true; do + USADO=$(du -sm "$DIR_ORIGEM/" | awk '{print $1}') + [ "$USADO" -gt "$TOTAL" ] && { + ANTIGO=$(ls -rt "$DIR_ORIGEM/" | head -1) + echo -e "${AMARELO}Removendo o arquivo $ANTIGO devido ao excesso de uso do espaço em disco.${RESET}" + rm "$DIR_ORIGEM/$ANTIGO" && echo -e "${VERDE}Arquivo $ANTIGO removido com sucesso. \n${RESET}" +} || { + echo "Arquivos cabem no diretório."; break +} +done +} +Sincronizar(){ + rclone -vP delete --delete-excluded "$DIR_ORIGEM/" "$DIR_DESTINO" --log-file="$ARQUIVO_LOG" + rclone -vP cleanup --progress "$DIR_DESTINO" --log-file="$ARQUIVO_LOG" + rclone -vP sync --progress "$DIR_ORIGEM/" "$DIR_DESTINO" --log-file="$ARQUIVO_LOG" +} +Validar(){ + tail "$ARQUIVO_LOG" | grep "ERROR"; [ ! $? -eq 0 ] && echo -e "\n${VERDE}Sincronismo concluído com sucesso. \n${RESET}" || { + echo -e "\n${VERMELHO}Erros encontrados. Verifique o arquivo $ARQUIVO_LOG. \n${RESET}" +} +} +Checar(){ + DATA_ORIGEM=$(ls $DIR_ORIGEM/*.tar.gz -tl --time-style="+%Y-%m-%d" | awk '{print $6}') + DATA_DESTINO=$(rclone lsl "$DIR_DESTINO" | awk '{print $2}') +[ "$DATA_ORIGEM" = "$DATA_DESTINO" ] && echo -e "${VERDE}O backup está sendo feito normalmente \n${RESET}" || { + echo -e "${VERMELHO}O backup está defasado \n${RESET}" +} +} +Armazenamento(){ + T=$(echo "$(rclone about $DIR_DESTINO | awk '{print $2}'| head -1) * 1028" | bc) + U=$(du -sm "$DIR_ORIGEM/" | awk '{print $1}') +[ "$T" -lt "$U" ] && Gerenciar || { + echo -e "${VERDE}Espaço disponível no drive é suficiente para a realização do backup \n${RESET}" +} +} +Backup(){ + Verificar && Realizar && HealthCheck + rclone config show 2>'/dev/null' | grep -q '^\[.*\]' && { + Gerenciar && Sincronizar && Validar && Checar +} || { + echo -e "${AMARELO}Backup feito apenas localmente \n${RESET}"; exit 0 +} +} +# ┌──────────────────────────────────────────────────────────┐ +# └─────────────────────────────────────────────{ PRINCIPAL }┘ +Finaliza(){ +case "$FINALIZAR" in + 2) sudo shutdown -h now ;; + 1) sudo reboot ;; + 0) exit 0 ;; +esac +} +[ -z "$1" ] && { + Backup; Finaliza +} || { +while [ -n "$1" ]; do +case "$1" in + -a) clear; echo -e "${AMARELO}Armazenamento da aplicação \n${RESET}"; Armazenamento; exit + ;; + -c) clear; echo -e "${AMARELO}Checando o rclone \n${RESET}"; Checar; exit + ;; + -C) clear; echo -e "${AMARELO}Configuração do rclone \n${RESET}"; Configurar; clear; exit + ;; + -i) clear; echo -e "${AMARELO}Informações de armazenamento \n${RESET}"; Informacao; exit + ;; + -l) clear; echo -e "${AMARELO}Listar arquivos e diretórios \n${RESET}"; Listar; exit + ;; + -s) clear; echo -e "${AMARELO}Sincronizar backups \n${RESET}"; Sincronizar; exit + ;; + -u) clear; echo -e "${AMARELO}Atualização do rclone \n${RESET}"; Testar; exit + ;; + -U) clear; sudo su -s '/bin/bash' -c 'hub -B'; exit + ;; + -v) clear; echo -e "${AMARELO}Verificação de arquivos \n${RESET}"; Verificar; exit + ;; + -V) clear; echo -e "\n ${VERDE}A versão do script é $VERSAO${RESET}"; exit + ;; + -h|--help) echo -e "\n $MENU \n${RESET}"; exit + ;; + *) echo -e "${VERMELHO}Opção inválida. $MENU \n${RESET}"; exit 1 + ;; +esac +done +} +# └──────────────────────────────────────────────────────────┘