O script de backup está pendurado

0

Eu tenho um script de backup para ser executado como uma tarefa cron e criar um backup diário de / var / log / messages /. Por favor, note que este script é mais para a experiência de aprendizagem do que a aplicação real. Eu adicionei instruções if / else para verificar o código de saída após o comando tar ser executado. O script funcionou bem antes, mas depois que eu adicionei esse recurso, ele trava. Código abaixo:

#!/bin/bash

admin="[email protected]"
of=messages-backup-$(date +%Y%m%d).tgz

cd /var/log/

tar -czvf $of messages

if [ $? -eq 0 ]; then
  mail -s "Backup of /var/log/messages was successful!" $admin
  exit 0
else
  mail -s "Backup of /var/log/messages has failed!" $admin
  exit 1
fi

cp $of /home/user/
rm -rf $of

Saída:

[root@nidesant2 Scripts]# ./backup.sh 
messages
^C
(Interrupt -- one more to kill letter)
    
por N.M.D 27.09.2016 / 20:52

1 resposta

4

Alterar

mail -s "Backup of /var/log/messages was successful!" $admin

para

echo hello | mail -s "Backup of /var/log/messages was successful!" $admin

ou

mail -s "Backup of /var/log/messages was successful!" $admin < /dev/null

A primeira opção, você pode usar qualquer texto que desejar para o corpo da mensagem. A segunda opção enviará o email com um corpo de mensagem vazio. Repita a mesma alteração para o segundo comando de email para um backup malsucedido.

Para fins de aprendizado, você deve verificar a conclusão bem-sucedida da criação do arquivo tar, copiá-lo e excluí-lo antes de determinar se foi bem-sucedido. Para fazer isso, você poderia fazer isso.

Alterar

tar -czvf $of messages

para

tar -czvf $of messages && cp $of /home/user/ && rm -rf $of

Além disso, com essa alteração, você removeria cp $of /home/user/ e rm -rf $of do final do script.

Em seguida, seu if / else será executado com base na conclusão bem-sucedida de todos os três comandos ou em uma conclusão malsucedida de qualquer um dos três comandos nessa sequência.

    
por 27.09.2016 / 21:16