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.
348 lines
11 KiB
348 lines
11 KiB
#!/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
|
|
|