Parar cron enviar e-mail para script de backup?

13

Eu configurei um script de backup para fazer backup de dados mundiais no meu servidor Minecraft de hora em hora usando cron, mas como os mundos são constantemente editados pelos jogadores, o tar estava me dizendo que os arquivos foram alterados enquanto eram lidos. Eu adicionei --ignore-command-error ao tar no script e isso suprime todos os erros quando eu o executo manualmente, no entanto, o cron ainda envia uma mensagem de e-mail dizendo que os arquivos foram alterados durante a leitura e acaba inundando meus e-mails porque é correr uma vez por hora. Alguém sabe como consertar isso? Este é o script:

filename=$(date +%Y-%m-%d)
cd /home/minecraft/Server/
for world in survival survival_nether survival_the_end creative superflat
do
if [ ! -d "/home/minecraft/backups/$world" ]; then
mkdir /home/minecraft/backups/$world
fi
find /home/minecraft/backups/$world -mtime +1 -delete
tar --ignore-command-error -c $world/ | nice -n 10 pigz -9 > /home/minecraft/backups/$world/$filename.tar.gz
done
Carter
fonte

Respostas:

22

Cron tentará enviar um email com qualquer saída que possa ter ocorrido quando o comando foi executado. Na página de manual do cron:

Ao executar comandos, qualquer saída é enviada ao proprietário do crontab (ou ao usuário especificado na variável de ambiente MAILTO no crontab, se houver). Qualquer saída do trabalho também pode ser enviada para o syslog usando a opção -s.

Portanto, para desativá-lo para uma entrada específica do crontab, basta capturar todos os comandos de saída e direcioná-lo para um arquivo ou para /dev/null.

30 * * * * notBraiamsBackup.sh >/dev/null 2>&1
slm
fonte
1
D: usando o meu exemplo!
Braiam
@Braiam - desculpe, eu estava com preguiça e não estava com vontade de digitar. Eu teria digitado a mesma coisa de qualquer maneira 8-).
Slm
@Braiam - isso é melhor? 8-).
Slm
Funciona muito bem, exatamente o que eu estava procurando.
Carter
Note que no meu CentOS 7, com crontabnot cron, -ssignifica selinux context.....
WesternGun
13

Em vez de canalizar tudo /dev/null(o que pode deixar você sem idéia do que aconteceu se algo der errado), você pode canalizar seus scripts para registrar arquivos como este:

30 * * * * backup.sh > ~/logs/backup.log

E para parar de receber e-mails, basta definir a MAILTOvariável como uma string vazia no início do seu arquivo crontab:

MAILTO=""
Enrico
fonte
4

Se você não deseja e-mails para uma tarefa cron específica, basta adicionar >/dev/null 2>&1no final da linha:

30 * * * * backup.sh >/dev/null 2>&1
Braiam
fonte
Eu escolho desta maneira: você perdeu a noção de tudo, mas ordenadamente.
WesternGun
0

Você deve adicionar o seguinte ao seu comando gnu tar : --warning = no-file-changes

Isso suprimirá todas as mensagens " % s: arquivo alterado à medida que o lemos ". E usando esta solução (e não redirecionando tudo para / dev / null), você ainda poderá receber mensagens de erro quando algo realmente der errado.


Com o sinalizador --warning, você pode ativar e desativar muitas mensagens diferentes que o tar imprime. Aqui está a parte relevante do manual com todas as palavras-chave que você pode usar: https://www.gnu.org/software/tar/manual/html_section/tar_27.html .

Nota: adicionando " no- " na frente de uma palavra-chave, a mensagem será suprimida.

O barqueiro silencioso
fonte