forked from SimplesIP/pabx-app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
349 lines
11 KiB
349 lines
11 KiB
2 years ago
|
#!/bin/bash
|
||
|
trap "" 2 20
|
||
|
|
||
|
#Para rodar o script via crontab sem passar pelo menu, adicione os parametros config,bd,audios,copia(realiza uma copia do arquivo para a Simples IP) apos o nome do script
|
||
|
#Ex: /hdaux/utilitarios/scripts/backup.sh config
|
||
|
#Ex: /hdaux/utilitarios/scripts/backup.sh config,bd
|
||
|
#Ex: /hdaux/utilitarios/scripts/backup.sh config,bd,audios
|
||
|
|
||
|
#Configuracao no crontab
|
||
|
#Backup - Shell
|
||
|
#0 1 * * * root /hdaux/utilitarios/scripts/backup.sh config,bd,copia
|
||
|
|
||
|
#Variaveis
|
||
|
#Diretorio raiz do backup sem / no final
|
||
|
DIR_BACKUP=/hdaux/backup
|
||
|
[ -d /hd2 ] && mkdir -p /hd2/backup && DIR_BACKUP=/hd2/backup
|
||
|
CLIENTE=$([ -e /hdaux/cliente ] && cat /hdaux/cliente)
|
||
|
IP_CENTRAL_SIP=$(ifconfig | grep "inet " | grep -v "127.0.0.1" | awk {'print $2'} | sed -e 's/addr://g'| sed -e 's/^/IP-CENTRAL-SIP:/g')
|
||
|
EMAIL="suporte@simplesip.com.br"
|
||
|
SERVER="192.168.115.13"
|
||
|
USER_REMOTO="backup"
|
||
|
SENHA_REMOTO="SimpleS"
|
||
|
PARAMETROS=$1
|
||
|
|
||
|
if [ -z $PARAMETROS ] ; then
|
||
|
# Loop que mostra o menu principal
|
||
|
drives=$( dialog --stdout \
|
||
|
--title 'Escolha dos Componentes' \
|
||
|
--separate-output \
|
||
|
--checklist 'Quais itens voce deseja copiar?' \
|
||
|
0 0 0 \
|
||
|
config '' ON \
|
||
|
bd '' ON \
|
||
|
audios '' OFF \
|
||
|
copia_remota_Simples_IP '' OFF )
|
||
|
|
||
|
|
||
|
# Apertou CANCELAR ou ESC, então sair...
|
||
|
[ $? -ne 0 ] && exit
|
||
|
else
|
||
|
drives=$(echo $PARAMETROS | sed "s/,/\\n/g")
|
||
|
fi
|
||
|
|
||
|
[ -z "$drives" ] && exit
|
||
|
|
||
|
#Armazenando a data e hora em uma variavel
|
||
|
declare -x data=$(date +%F-%H-%M-%S)
|
||
|
|
||
|
#Criando a pasta para armazenar o backup:
|
||
|
mkdir -p $DIR_BACKUP/$data
|
||
|
|
||
|
echo "$drives" | while read LINHA
|
||
|
do
|
||
|
case $LINHA in
|
||
|
config)
|
||
|
clear
|
||
|
echo "Copiando arquivos de configuracao"
|
||
|
mkdir -p $DIR_BACKUP/$data/var_spool_asterisk
|
||
|
cp -Rap /etc/asterisk $DIR_BACKUP/$data/etc_asterisk
|
||
|
cp -Rap /var/lib/asterisk $DIR_BACKUP/$data/var_lib_asterisk
|
||
|
cp -Rap /var/spool/asterisk/{dictate,meetme,outgoing,system,tmp,voicemail} $DIR_BACKUP/$data/var_spool_asterisk/
|
||
|
cp -Rap /etc/dahdi $DIR_BACKUP/$data/etc_dahdi
|
||
|
cp -Rap /etc/ppp $DIR_BACKUP/$data/etc_ppp
|
||
|
cp -Rap /etc/snmp $DIR_BACKUP/$data/etc_snmp
|
||
|
cp -Rap /hdaux/utilitarios/scripts $DIR_BACKUP/$data/hdaux_utilitarios_scripts
|
||
|
wget -qO- 'http://127.0.0.1' | grep -i "<title>Sistema" > $DIR_BACKUP/$data/versao.txt
|
||
|
|
||
|
;;
|
||
|
|
||
|
bd)
|
||
|
clear
|
||
|
echo "Copiando banco de dados"
|
||
|
pg_dump -i -Fp pbx > $DIR_BACKUP/$data/pbx.sql
|
||
|
RESULT=$?
|
||
|
if [ "$RESULT" != "0" ] ; then
|
||
|
clear
|
||
|
echo -e "Subject: BACKUP - CLIENTE:$CLIENTE\nERRO DURANTE O BACKUP DO BANCO DE DADOS EM: $(date +%F-%H-%M-%S). \n$IP_CENTRAL_SIP" | msmtp -t $EMAIL
|
||
|
fi
|
||
|
|
||
|
;;
|
||
|
|
||
|
audios)
|
||
|
clear
|
||
|
echo "Copiando arquivos de audio (gravacoes)"
|
||
|
mkdir -p $DIR_BACKUP/$data/gravacoes
|
||
|
CONT=1
|
||
|
ARQUIVOS=$(ls -ltr --time-style=+%F-%T /var/spool/asterisk/monitor/ | grep -v "\-rwxr-x---" | grep -i wav)
|
||
|
TOTAL=$(echo "$ARQUIVOS" | wc -l)
|
||
|
|
||
|
|
||
|
echo "$ARQUIVOS" | while read LINHA; do
|
||
|
echo "Copiando arquivo $CONT de $TOTAL"
|
||
|
echo ""
|
||
|
ANO=$(echo "$LINHA" | awk {'print $6'} | cut -f 1 -d "-")
|
||
|
MES=$(echo "$LINHA" | awk {'print $6'} | cut -f 2 -d "-")
|
||
|
AUDIO=$(echo "$LINHA" | awk {'print $7'})
|
||
|
|
||
|
if ! [ -d $DIR_BACKUP/$data/gravacoes/$ANO ] ; then
|
||
|
mkdir -p $DIR_BACKUP/$data/gravacoes/$ANO
|
||
|
fi
|
||
|
|
||
|
if ! [ -d $DIR_BACKUP/$data/gravacoes/$ANO/$MES ] ; then
|
||
|
mkdir -p $DIR_BACKUP/$data/gravacoes/$ANO/$MES
|
||
|
fi
|
||
|
|
||
|
cp -Rap /var/spool/asterisk/monitor/$AUDIO $DIR_BACKUP/$data/gravacoes/$ANO/$MES/
|
||
|
[ -f $DIR_BACKUP/$data/gravacoes/$ANO/$MES/$AUDIO ] && chmod 0750 /var/spool/asterisk/monitor/$AUDIO
|
||
|
CONT=$(($CONT + 1))
|
||
|
done
|
||
|
|
||
|
;;
|
||
|
|
||
|
copia_remota_Simples_IP)
|
||
|
echo "OK" > /tmp/copia_bkp.txt
|
||
|
;;
|
||
|
|
||
|
copia)
|
||
|
echo "OK" > /tmp/copia_bkp.txt
|
||
|
;;
|
||
|
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
#Criando arquivo de restauracao
|
||
|
cd $DIR_BACKUP
|
||
|
[ -e $DIR_BACKUP/$data/restaura.sh ] && /bin/rm -rf $DIR_BACKUP/$data/restaura.sh
|
||
|
cat << EOF > $DIR_BACKUP/$data/restaura.sh
|
||
|
#!/bin/bash
|
||
|
trap "" 2 20
|
||
|
|
||
|
#Variaveis
|
||
|
#Descobrindo o caminho do script
|
||
|
DIR=\$(dirname \$0)
|
||
|
PATH_ARQUIVO=\$(cd \$DIR;pwd)
|
||
|
|
||
|
# Loop que mostra o menu principal
|
||
|
drives=\$( dialog --stdout \
|
||
|
--title 'Escolha dos Componentes' \
|
||
|
--separate-output \
|
||
|
--checklist 'Quais itens voce deseja restaurar?' \
|
||
|
0 0 0 \
|
||
|
config '' ON \
|
||
|
bd '' ON \
|
||
|
audios '' OFF \
|
||
|
configs_vpn '' OFF )
|
||
|
|
||
|
|
||
|
# Apertou CANCELAR ou ESC, entao sair...
|
||
|
[ \$? -ne 0 ] && exit
|
||
|
[ -z "\$drives" ] && exit
|
||
|
|
||
|
#Armazenando a data e hora em uma variavel
|
||
|
declare -x data=\$(date +%F-%H-%M-%S)
|
||
|
|
||
|
#Muda para a raiz da pasta backup
|
||
|
cd \$PATH_ARQUIVO/
|
||
|
|
||
|
echo "\$drives" | while read LINHA
|
||
|
do
|
||
|
case \$LINHA in
|
||
|
config)
|
||
|
cd \$PATH_ARQUIVO/
|
||
|
clear
|
||
|
! [ -d etc_asterisk ] && echo "Arquivos de configuracao nao encontrado" && touch /tmp/erro_config.txt && exit
|
||
|
echo "Restaurando arquivos de configuracao"
|
||
|
/etc/init.d/rc.pbx stop
|
||
|
sleep 5
|
||
|
[ -d /etc/asterisk ] && /bin/rm -rf /etc/asterisk
|
||
|
[ -d /var/lib/asterisk ] && /bin/rm -rf /var/lib/asterisk
|
||
|
! [ -d /var/spool/asterisk ] && mkdir -p /var/spool/asterisk
|
||
|
[ -d /etc/dahdi ] && /bin/rm -rf /etc/dahdi
|
||
|
[ -d /hdaux/utilitarios/scripts ] && /bin/rm -rf /hdaux/utilitarios/scripts
|
||
|
/bin/cp -Rapf etc_asterisk /etc/asterisk
|
||
|
/bin/cp -Rapf var_lib_asterisk /var/lib/asterisk
|
||
|
/bin/cp -Rapf var_spool_asterisk/* /var/spool/asterisk/
|
||
|
/bin/cp -Rapf etc_dahdi /etc/dahdi
|
||
|
/bin/cp -Rapf hdaux_utilitarios_scripts /hdaux/utilitarios/scripts
|
||
|
/hdaux/utilitarios/scripts/permissoes_atualizacao.sh
|
||
|
/etc/init.d/rc.pbx start
|
||
|
/etc/init.d/supervisor start
|
||
|
|
||
|
;;
|
||
|
|
||
|
bd)
|
||
|
clear
|
||
|
! [ -e pbx.sql ] && echo "Arquivo pbx.sql nao encontrado" && touch /tmp/erro_bd.txt && exit
|
||
|
echo "Restaurando banco de dados"
|
||
|
cd /tmp
|
||
|
[ -e /etc/init.d/supervisor ] && /etc/init.d/supervisor stop
|
||
|
! [ -e /var/lib/pgsql/data/postmaster.pid ] && service postgresql start && sleep 15
|
||
|
if ! [ -e /var/lib/pgsql/data/postmaster.pid ] ; then
|
||
|
clear
|
||
|
echo "O banco de dados nao esta acessivel"
|
||
|
echo "Restauracao cancelada"
|
||
|
touch /tmp/erro_bd.txt
|
||
|
exit
|
||
|
fi
|
||
|
#Criando Banco de Dados
|
||
|
if ! [ -z "\$(su postgres -c 'psql -l' | grep 'pbx ')" ] ; then
|
||
|
service postgresql stop
|
||
|
sleep 5
|
||
|
service postgresql start
|
||
|
sleep 15
|
||
|
if ! [ -e /var/lib/pgsql/data/postmaster.pid ] ; then
|
||
|
clear
|
||
|
echo "Aguardando resposta do Banco de Dados"
|
||
|
for i in {30..1};do sleep 1 && echo -n "\$i ";done
|
||
|
if ! [ -e /var/lib/pgsql/data/postmaster.pid ] ; then
|
||
|
echo "O banco de dados nao esta acessivel"
|
||
|
echo "Restauracao cancelada"
|
||
|
touch /tmp/erro_bd.txt
|
||
|
exit
|
||
|
fi
|
||
|
fi
|
||
|
su postgres -c "dropdb pbx"
|
||
|
fi
|
||
|
sleep 5
|
||
|
su postgres -c "createdb pbx"
|
||
|
sleep 5
|
||
|
/bin/cp -Rap \$PATH_ARQUIVO/pbx*.sql /tmp/pbx.sql
|
||
|
su postgres -c "psql -d pbx -f /tmp/pbx.sql"
|
||
|
sleep 1
|
||
|
/bin/rm -rf /tmp/pbx.sql
|
||
|
|
||
|
;;
|
||
|
|
||
|
audios)
|
||
|
cd \$PATH_ARQUIVO/
|
||
|
clear
|
||
|
! [ -d gravacoes ] && echo "Diretorio de audios (gravacoes) nao encontrado" && touch /tmp/erro_audios.txt && exit
|
||
|
echo "Restaurando arquivos de audio (gravacoes)"
|
||
|
! [ -d /var/spool/asterisk/monitor ] && mkdir -p /var/spool/asterisk/monitor
|
||
|
CONT=1
|
||
|
ARQUIVOS=\$(find gravacoes/ -iname *.WAV)
|
||
|
TOTAL=\$(echo "\$ARQUIVOS" | wc -l)
|
||
|
echo "\$ARQUIVOS" | while read LINHA; do
|
||
|
echo "Copiando arquivo \$CONT de \$TOTAL"
|
||
|
/bin/cp -Rap \$LINHA /var/spool/asterisk/monitor/
|
||
|
CONT=\$((\$CONT + 1))
|
||
|
done
|
||
|
/hdaux/utilitarios/scripts/permissoes_atualizacao.sh
|
||
|
|
||
|
;;
|
||
|
|
||
|
configs_vpn)
|
||
|
cd \$PATH_ARQUIVO/
|
||
|
clear
|
||
|
! [ -d etc_ppp ] && echo "Arquivos de configuracao da VPN nao encontrado" && touch /tmp/erro_vpn.txt && exit
|
||
|
echo "Restaurando arquivos de configuracao da VPN"
|
||
|
exit
|
||
|
[ -d /etc/ppp ] && /bin/rm -rf /etc/ppp
|
||
|
[ -d /etc/snmp ] && /bin/rm -rf /etc/snmp
|
||
|
/bin/cp -Rap etc_ppp /etc/ppp
|
||
|
/bin/cp -Rap etc_snmp /etc/snmp
|
||
|
;;
|
||
|
|
||
|
esac
|
||
|
done
|
||
|
[ -e /tmp/erro_config.txt ] && /bin/rm -rf /tmp/erro_config.txt && exit
|
||
|
[ -e /tmp/erro_bd.txt ] && /bin/rm -rf /tmp/erro_bd.txt && exit
|
||
|
[ -e /tmp/erro_audios.txt ] && /bin/rm -rf /tmp/erro_audios.txt && exit
|
||
|
[ -e /tmp/erro_vpn.txt ] && /bin/rm -rf /tmp/erro_vpn.txt && exit
|
||
|
clear
|
||
|
service snmpd restart
|
||
|
/bin/rm -rf \$PATH_ARQUIVO
|
||
|
echo "Arquivos restaurados"
|
||
|
echo ""
|
||
|
echo ""
|
||
|
exit 0
|
||
|
EOF
|
||
|
chmod 777 $DIR_BACKUP/$data/restaura.sh
|
||
|
|
||
|
#Compactando o backup
|
||
|
cd $DIR_BACKUP
|
||
|
diasemana=$(date +%A)
|
||
|
|
||
|
case $diasemana in
|
||
|
Monday)
|
||
|
diasemana=segunda-feira
|
||
|
;;
|
||
|
|
||
|
Tuesday)
|
||
|
diasemana=terca-feira
|
||
|
;;
|
||
|
|
||
|
Wednesday)
|
||
|
diasemana=quarta-feira
|
||
|
|
||
|
;;
|
||
|
|
||
|
Thursday)
|
||
|
diasemana=quinta-feira
|
||
|
|
||
|
;;
|
||
|
|
||
|
Friday)
|
||
|
diasemana=sexta-feira
|
||
|
;;
|
||
|
|
||
|
Saturday)
|
||
|
diasemana=sabado
|
||
|
;;
|
||
|
|
||
|
Sunday)
|
||
|
diasemana=domingo
|
||
|
;;
|
||
|
|
||
|
esac
|
||
|
[ -e $diasemana.tar.gz ] && rm -rf $diasemana.tar.gz
|
||
|
clear
|
||
|
echo "Compactando Arquivo"
|
||
|
tar czf $diasemana.tar.gz $data
|
||
|
rm -rf $data
|
||
|
|
||
|
#Copiando para Simples IP
|
||
|
if [ -e /tmp/copia_bkp.txt ] ; then
|
||
|
clear
|
||
|
echo "Copiando arquivo para Simples IP"
|
||
|
cd $DIR_BACKUP
|
||
|
mount.cifs //$SERVER/backup /mnt -o fstype=cifs,user=$USER_REMOTO,password=$SENHA_REMOTO,file_mode=0644,dir_mode=0777,vers=2.1
|
||
|
VAR_ERRO=$?
|
||
|
CONT=1
|
||
|
while [ "$VAR_ERRO" != "0" ] ; do
|
||
|
sleep 600
|
||
|
mount.cifs //$SERVER/backup /mnt -o fstype=cifs,user=$USER_REMOTO,password=$SENHA_REMOTO,file_mode=0644,dir_mode=0777,vers=2.1
|
||
|
VAR_ERRO=$?
|
||
|
CONT=$(($CONT + 1))
|
||
|
if [ "$CONT" == "100" ] ; then
|
||
|
rm -rf /tmp/copia_bkp.txt
|
||
|
echo -e "Subject: Backup Cliente:$CLIENTE\nErro ao montar o compartilhamento em $(date +%F-%H-%M-%S)." | msmtp -t $EMAIL
|
||
|
exit;
|
||
|
fi
|
||
|
done
|
||
|
! [ -d /mnt/backup/$CLIENTE ] && mkdir /mnt/backup/$CLIENTE
|
||
|
[ -e /mnt/backup/$CLIENTE/$diasemana.tar.gz ] && rm -rf /mnt/backup/$CLIENTE/$diasemana.tar.gz
|
||
|
cp -Rap $diasemana.tar.gz /mnt/backup/$CLIENTE/
|
||
|
ORIGINAL=$(md5sum $diasemana.tar.gz | awk {'print $1'})
|
||
|
COPIA=$(md5sum /mnt/backup/$CLIENTE/$diasemana.tar.gz | awk {'print $1'})
|
||
|
[ "$ORIGINAL" != "$COPIA" ] && echo -e "Subject: Backup Cliente:$CLIENTE\nErro ao realizar copia do arquivo em $(date +%F-%H-%M-%S)." | msmtp -t $EMAIL
|
||
|
umount /mnt
|
||
|
rm -rf /tmp/copia_bkp.txt
|
||
|
fi
|
||
|
if [ "$ORIGINAL" != "$COPIA" ] ; then
|
||
|
echo "Backup realizado com sucesso - Falha na copia para Simples IP"
|
||
|
else
|
||
|
echo "Backup realizado com sucesso"
|
||
|
fi
|
||
|
exit 0
|