Interromper cp [RESOLVIDO]

1. Interromper cp [RESOLVIDO]

Henri Azevedo
azevedohenri

(usa Debian)

Enviado em 21/12/2017 - 10:14h

Bom dia pessoal,

Não tenho conhecimento algum em Shell Script, mas me interesso a aprender, tanto que comprei um livro e estou estudando, mas tenho um problema que não tem como esperar eu tem um bom conhecimento no assunto.

Minha situação é o seguinte, escrevi um script básica de backup, ele é feito remotamente para um outro servidor linux, acontece que aqui na empresa onde trabalho sempre quando chove há problemas com a energia, assim desligando o servidor de backup, apenas o de backup, então se o servidor de backup desligar enquanto estiver rodando o backup, os arquivos começam a ser copiados no servidor local.

Minha dúvida é, teria algum jeito de interromper o comando cp caso a pasta em questão seja desmontada?

segue o script abaixo:



# Cria uma pasta mensal para armazenamento de logs
# Parâmetro -p para não dar erro caso a pasta já exista
mkdir -p /var/log/Backup
mkdir -p /var/log/Backup/$(date +%m)

# Cria o arquivo diário de logs
touch /var/log/Backup/$(date +%m)/Storage.$(date +%d)
touch /var/log/Backup/$(date +%m)/Domain.$(date +%d)
touch /var/log/Backup/$(date +%m)/Users.$(date +%d)

# Testa se servidor de backup está ligado
if ! ping -c 5 <IP>; then

touch /var/log/Backup/$(date +%m)/Error.$(date +%d)

# Servidor não está ligado
echo "Servidor de backup desconectado" >> /var/log/Backup/$(date +%m)/Error.$(date +%d)

else

#Servidor ligado e disponivel para conexão

# Desmonta partição caso tenha algum mapeamento aberto
umount /media/Backup

# Realiza a conexão com o compartilhamento de backup
mount -t cifs //<IP>/Storage/Eros /media/Backup -o username=<usuario>,password=<senha>

# Realiza a cópia de segurança mostrando os arquivos que estão sendo copiados no arquivo de log
# Parâmetro -R para copiar pastas e subpastas
# Parâmetro -u para copiar apenas os arquivos que tiveram alterações ou os que não existam
# Parâmetro -v para mostrando o que está sendo copiado no momento
# Comando >> para adicionar o resultando do comando de cópia em algum arquivo, no caso o de logs

####################################################################
# Backup da pasta setores iniciado
cp -Ruv /media/Setores /media/Backup >> /var/log/Backup/$(date +%m)/Storage.$(date +%d)
chmod 777 -R /media/Backup
# Backup da pasta setores concluido
####################################################################


####################################################################
# Backup dos arquivos do serviço de dominio iniciado

# Criando pastas no diretório de backup
mkdir -p /media/Backup/Domínio/$(date +%m)
mkdir -p /media/Backup/Domínio/$(date +%m)/netlogon
mkdir -p /media/Backup/Domínio/$(date +%m)/etc
mkdir -p /media/Backup/Domínio/$(date +%m)/etc/samba
mkdir -p /media/Backup/Domínio/$(date +%m)/var
mkdir -p /media/Backup/Domínio/$(date +%m)/var/lib
mkdir -p /media/Backup/Domínio/$(date +%m)/var/lib/samba
mkdir -p /media/Backup/Domínio/$(date +%m)/etc/network

#Cria arquivo para armazenamento do ID do dominio
touch /media/Backup/Domínio/$(date +%m)/domainsid

# Exporta o ID do dominio para o arquivo criado
net getdomainsid > /media/Backup/Domínio/$(date +%m)/domainsid

# Realiza a cópia de segurança
cp -uv /etc/fstab /media/Backup/Domínio/$(date +%m)/etc/fstab >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -uv /etc/samba/smb.conf /media/Backup/Domínio/$(date +%m)/etc/samba/smb.conf >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -Ruv /var/lib/samba/private /media/Backup/Domínio/$(date +%m)/var/lib/samba/ >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -uv /etc/krb5.conf /media/Backup/Domínio/$(date +%m)/etc/krb5.conf >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -uv /etc/passwd /media/Backup/Domínio/$(date +%m)/etc/passwd >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -uv /etc/group /media/Backup/Domínio/$(date +%m)/etc/group >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -uv /etc/shadow /media/Backup/Domínio/$(date +%m)/etc/shadow >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -uv /etc/hosts /media/Backup/Domínio/$(date +%m)/etc/hosts >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -uv /etc/hostname /media/Backup/Domínio/$(date +%m)/etc/hostname >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -uv /etc/resolv.conf /media/Backup/Domínio/$(date +%m)/etc/resolv.conf >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -uv /etc/network/interfaces /media/Backup/Domínio/$(date +%m)/etc/network/interfaces >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -Ruv /var/lib/samba/sysvol/adl.com.br/scripts /media/Backup/Domínio/$(date +%m)/netlogon >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
cp -uv /etc/backup.sh /media/Backup/backup.sh >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)
# Relata conclusão do backup
echo Backup realizado com sucesso em $(date) >> /var/log/Backup/$(date +%m)/Domain.$(date +%d)

# Backup dos arquivos do serviço de dominio concluido
####################################################################

# Desconecta compartilhamento de backup
umount /media/Backup


####################################################################
# Backup dos arquivos de backup dos usuários iniciado

mount -t cifs //<IP>/Users /media/Backup/Usuarios -o username=<Usuario>,password=<Senha>

# Copia pasta de backup dos usuários
cp -Ruv /media/Usuarios /media/Backup >> /var/log/Backup/$(date +%m)/Users.$(date +%d)

# Backup dos arquivos de backup dos usuários concluido
####################################################################

# Desconecta compartilhamento de backup
umount /media/Backup/Usuarios

fi

# Remove permissão root dos arquivos de logs
chmod 777 -R /var/log/Backup

# Reinicia o servidor para matar qualquer sessão de arquivo aberto
reboot now




  


2. Re: Interromper cp

Sandro Marcell
SMarcell

(usa Slackware)

Enviado em 22/12/2017 - 14:21h

Você pode tentar uma aproximação mais ou menos assim:

#!/bin/sh
realizarBackups() {
# Aqui vao os comandos que realizam todos os processos de backup
while sleep 1; do
echo 'Realizando backups...'
done
}

# Dispara a funcao que realizara os backups em background
realizarBackups &
bg_func=$! # Salva o PID da funcao disparada

# Verifica a cada 5 segundos o status do servidor remoto
while sleep 5; do
ping -c3 xxx.xxx.xxx.xxx >&- 2>&-
if [ $? -ne 0 ]; then
echo '[FALHA]: Servidor remoto offline!'
kill $bg_func # Finaliza a funcao "realizarBackups"
exit 1
fi
done

# Controle de interrupcoes
trap "kill $bg_func; exit" INT TERM EXIT


Adapte ao seu caso e veja se ajuda.


3. Re: Interromper cp [RESOLVIDO]

Henri Azevedo
azevedohenri

(usa Debian)

Enviado em 09/01/2018 - 09:40h

Adaptei meu código com o que você passou, mas como não conheço ainda algumas sintaxes que tem no seu código gostaria de saber se está correta minha adaptação..

#!/bin/bash

# Declaração de variáveis
SERVER_BACKUP=ip
USER_BACKUP=usuario
PASS_BACKUP=senha

# Cria pastas e arquivos de logs
criaLogs(){
# Pastas mensais
mkdir -p /var/log/Backup
mkdir -p /var/log/Backup/$(date +%b)
mkdir -p /var/log/Backup/$(date +%b)/Storage
mkdir -p /var/log/Backup/$(date +%b)/Domain
mkdir -p /var/log/Backup/$(date +%b)/Users
mkdir -p /var/log/Backup/$(date +%b)/Error

# Arquivos diários
touch /var/log/Backup/$(date +%b)/Storage/Storage-$(date +%d).log
touch /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
touch /var/log/Backup/$(date +%b)/Users/Users-$(date +%d).log
touch /var/log/Backup/$(date +%b)/Error/Error-$(date +%d).log
}

realizarBackups() {
while sleep 1; do

# Realiza a conexão com o compartilhamento de backup
mount -t cifs //$SERVER_BACKUP/Storage/Eros /media/Backup/Setores -o username=$USER_BACKUP,password=$PASS_BACKUP

# Relata inicio de backup
echo "Backup iniciado em $(date)" >> /var/log/Backup/$(date +%b)/Storage/Storage-$(date +%d).log
echo " " >> /var/log/Backup/$(date +%b)/Storage/Storage-$(date +%d).log
# Inicia cópia de segurança das pastas dos setores
cp -Ruv /media/Setores /media/Backup/Setores >> /var/log/Backup/$(date +%b)/Storage/Storage-$(date +%d).log
# Relata final de backup
echo " " >> /var/log/Backup/$(date +%b)/Storage/Storage-$(date +%d).log
echo "Backup finalizado em $(date)" >> /var/log/Backup/$(date +%b)/Storage/Storage-$(date +%d).log

# Pastas de backup do serviço de domínio samba
mkdir -p /media/Backup/Setores/Domínio/$(date +%b)
mkdir -p /media/Backup/Setores/Domínio/$(date +%b)/netlogon
mkdir -p /media/Backup/Setores/Domínio/$(date +%b)/etc
mkdir -p /media/Backup/Setores/Domínio/$(date +%b)/etc/samba
mkdir -p /media/Backup/Setores/Domínio/$(date +%b)/var
mkdir -p /media/Backup/Setores/Domínio/$(date +%b)/var/lib
mkdir -p /media/Backup/Setores/Domínio/$(date +%b)/var/lib/samba
mkdir -p /media/Backup/Setores/Domínio/$(date +%b)/etc/network
# Cria arquivo para armazenamento do ID do dominio
touch /media/Backup/Setores/Domínio/$(date +%b)/domainsid
# Exporta o ID do dominio para o arquivo criado
net getdomainsid > /media/Backup/Setores/Domínio/$(date +%b)/domainsid

# Relata inicio do backup do ac dc
echo "Backup iniciado em $(date)" >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
echo " " >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
# Realiza a cópia de segurança
cp -uv /etc/fstab /media/Backup/Setores/Domínio/$(date +%b)/etc/fstab >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -uv /etc/samba/smb.conf /media/Backup/Setores/Domínio/$(date +%b)/etc/samba/smb.conf >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -Ruv /var/lib/samba/private /media/Backup/Setores/Domínio/$(date +%b)/var/lib/samba/ >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -uv /etc/krb5.conf /media/Backup/Setores/Domínio/$(date +%b)/etc/krb5.conf >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -uv /etc/passwd /media/Backup/Setores/Domínio/$(date +%b)/etc/passwd >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -uv /etc/group /media/Backup/Setores/Domínio/$(date +%b)/etc/group >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -uv /etc/shadow /media/Backup/Setores/Domínio/$(date +%b)/etc/shadow >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -uv /etc/hosts /media/Backup/Setores/Domínio/$(date +%b)/etc/hosts >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -uv /etc/hostname /media/Backup/Setores/Domínio/$(date +%b)/etc/hostname >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -uv /etc/resolv.conf /media/Backup/Setores/Domínio/$(date +%b)/etc/resolv.conf >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -uv /etc/network/interfaces /media/Backup/Setores/Domínio/$(date +%b)/etc/network/interfaces >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -Ruv /var/lib/samba/sysvol/adl.com.br/scripts /media/Backup/Setores/Domínio/$(date +%b)/netlogon >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
cp -uv /etc/backup.sh /media/Backup/Setores/backup.sh >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
# Relata conclusão do backup do ac dc
echo " " >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log
echo "Backup finalizado em $(date)" >> /var/log/Backup/$(date +%b)/Domain/Domain-$(date +%d).log


# Desconecta compartilhamento de backup dos setores/ac dc
umount /media/Backup/Setores


mount -t cifs //$SERVER_BACKUP/Users /media/Backup/Usuarios -o username=$USER_BACKUP,password=$PASS_BACKUP
# Relata inicio do backup dos usuarios
echo "Backup iniciado em $(date)" >> /var/log/Backup/$(date +%b)/Users/Users-$(date +%d).log
echo " " >> /var/log/Backup/$(date +%b)/Users/Users-$(date +%d).log
# Copia pasta de backup dos usuários
cp -Ruv /media/Usuarios /media/Backup >> /var/log/Backup/$(date +%b)/Users/Users-$(date +%d).log
# Relata conclusão do backup dos usuarios
echo " " >> /var/log/Backup/$(date +%b)/Users/Users-$(date +%d).log
echo "Backup finalizado em $(date)" >> /var/log/Backup/$(date +%b)/Users/Users-$(date +%d).log

# Desconecta compartilhamento de backup
umount /media/Backup/Usuarios
# Da permissões especiais para todos
chmod 777 -R /var/log/Backup
done
}

# Dispara a funcao que realizara os backups em background
criaLogs
realizarBackups &
bg_func=$! # Salva o PID da funcao disparada

# Verifica a cada 5 segundos o status do servidor remoto
while sleep 5; do
ping -c3 $SERVER_BACKUP >&- 2>&-
if [ $? -ne 0 ]; then
echo "Servidor de backup sem conexão às $(date +%H:%M:%S)" >> /var/log/Backup/$(date +%b)/Error/Error-$(date +%d).log
kill $bg_func # Finaliza a funcao "realizarBackups"
exit 1
fi
done

# Controle de interrupcoes
trap "kill $bg_func; exit" INT TERM EXIT







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts