Pular para o conteúdo

Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Responder tópico
  • Denunciar
  • Indicar
01 02

1. Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Enviado em 26/09/2012 - 10:35h

Olá, eu criei um script que faz o backup das pastas selecionadas em uma só pasta, compacta, manda por email e apaga a pasta original e o backup da semana passada.

A questão é que quando eu mesmo rodo com "./backup.sh", ele faz todas as tarefas com sucesso e o backup está lá no meu email. Mas eu coloquei o job no crontab para rodar toda sexta-feira às 7 da manhã e ele só faz parte do script. Ele chega a criar o arquivo compactado e apaga a pasta backup, mas quando vou olhar no gmail, não tem o email lá...

Segue o script para que vejam se fiz algo de errado:

*******************************************************************
#!/bin/bash
#script de backup do box linux

# Criacao dos diretorios

cd /var
mkdir backup
cd backup
mkdir usr
cd usr
mkdir local
cd local
mkdir nagios
mkdir etc
cd etc
mkdir email
cd /var/backup
mkdir etc
cd etc
mkdir vsftpd
mkdir mrtg
mkdir httpd
cd httpd
mkdir conf
mkdir conf.d
cd /var/backup
mkdir var
cd var
mkdir www
cd www
mkdir html
cd html
mkdir mrtg
cd /var/backup

# pastas a serem copiadas com seu caminho original

yes | cp -rf /usr/local/nagios/* /var/backup/usr/local/nagios
yes | cp -rf /usr/local/etc/email/* /var/backup/usr/local/etc/email/
yes | cp -rf /etc/sudoers /var/backup/etc/sudoers
yes | cp -rf /etc/mrtg /var/backup/etc/mrtg
yes | cp -rf /etc/rc.local /var/backup/etc/rc.local
yes | cp -rf /etc/vsftpd/* /var/backup/etc/vsftpd
yes | cp -rf /etc/httpd/conf/* /var/backup/etc/httpd/conf
yes | cp -rf /etc/httpd/conf.d/* /var/backup/etc/httpd/conf.d
yes | cp -rf /var/www/html/mrtg/* /var/backup/var/www/html/mrtg
yes | cp -rf /var/www/html/*.html /var/backup/var/www/html

#comprimir a pasta de backup em 1 arquivo e apagar a pasta backup

cd /var

tar -zcvf backup_linux_`date +%Y-%m-%d`.tar.gz backup
rm -rf backup

# Envie o log por email

email -b -s "Backup Nagios `date +%Y-%m-%d`" -a /var/backup_linux_`date +%Y-%m-%d`.tar.gz netrocinha@gmail.com

# Apague o backup da semana passada

rm backup_linux_$(date -d "7 days ago" +%Y-%m-%d).tar.gz

echo Finalizado com sucesso!!!
*******************************************************************

E aqui está o crontab que edito com o comando "crontab -e":

0 7 * * 5 sh /root/backup.sh


Agradeço de antemão.

Responder tópico

2. Re: Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Melhor resposta

Enviado em 28/09/2012 - 09:46h

#!/bin/bash
#script de backup do box linux

# Criacao dos diretorios

mkdir -p /var/backup/usr/local/nagios
mkdir -p /var/backup/usr/local/etc/email
mkdir -p /var/backup/etc/vsftpd
mkdir -p /var/backup/etc/mrtg
mkdir -p /var/backup/etc/httpd/conf
mkdir -p /var/backup/etc/httpd/conf.d
mkdir -p /var/backup/var/www/html/mrtg

# pastas a serem copiadas com seu caminho original

yes | cp -rf /usr/local/nagios/* /var/backup/usr/local/nagios
yes | cp -rf /usr/local/etc/email/* /var/backup/usr/local/etc/email/
yes | cp -rf /etc/sudoers /var/backup/etc/sudoers
yes | cp -rf /etc/mrtg /var/backup/etc/mrtg
yes | cp -rf /etc/rc.local /var/backup/etc/rc.local
yes | cp -rf /etc/vsftpd/* /var/backup/etc/vsftpd
yes | cp -rf /etc/httpd/conf/* /var/backup/etc/httpd/conf
yes | cp -rf /etc/httpd/conf.d/* /var/backup/etc/httpd/conf.d
yes | cp -rf /var/www/html/mrtg/* /var/backup/var/www/html/mrtg
yes | cp -rf /var/www/html/*.html /var/backup/var/www/html

#comprimir a pasta de backup em 1 arquivo e apagar a pasta backup

cd /var

tar -zcvf backup_linux_`date +%Y-%m-%d`.tar.gz backup
VARAUX=$?

if [ $VARAUX -eq 0 ]; then
# Envie o log por email
/usr/local/bin/email -b -s "Backup Nagios `date +%Y-%m-%d`" -a /var/backup_linux_`date +%Y-%m-%d`.tar.gz netrocinha@gmail.com
$VARAUX=$?
if [ $VARAUX -eq 0 ]; then
echo "Email enviado com sucesso." >> /var/log/debug_script.log
rm -rf backup
else
echo "Erro ao enviar o email." >> /var/log/debug_script.log
fi
else
echo "Erro na criação do backup .tar.gz" >> /var/log/debug_script.log
fi

# Apague o backup da semana passada

rm backup_linux_$(date -d "7 days ago" +%Y-%m-%d).tar.gz
Agora basta verificar o arquivo /var/log/debug_script.log.

3. Re: Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Enviado em 26/09/2012 - 11:14h

Olá,

Esse comando email é o mesmo que o mail? Tente colocar o caminho completo dele e veja se o problema persiste. Tente também utilizar o comando mail.

Sei que o cron tem problemas com PATH e talvez o problema seja isso.

t+

4. Re: Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Enviado em 26/09/2012 - 12:03h

Eu instalei esse email aí. Funciona legal, mas como vc pediu, eu adicionei " /usr/local/bin/" antes do comando e ficou assim:

/usr/local/bin/email -b -s "Backup Nagios `date +%Y-%m-%d`" -a /var/backup_linux_`date +%Y-%m-%d`.tar.gz netrocinha@gmail.com

Testei o comando na mão e funcionou legal. Pelo Cron, nada feito ainda...

5. Re: Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Enviado em 26/09/2012 - 12:45h

Em seu crontab existe a variável PATH?

6. Re: Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Enviado em 26/09/2012 - 12:49h

Agora vc me fez uma pergunta difícil...

Quando digito "crontab -e" utilizando o user root, eis o que aparece:

0 7 * * 5 root /root/backup.sh

só isso! Eu alterei um pouquinho do original que era

0 7 * * 5 sh /root/backup.sh

(achava que tinha que colocar o comando "sh" antes e nem sabia que tinha que botar o user)

Bom, pra resumir, não entendi sua pergunta e não sei se a respondi. :/


*********
*Editado*
*********

Encontrei na net que deveria ter algo como

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

é isso que vc ta falando? Devo adicionar isso ao meu crontab?

7. Re: Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Enviado em 26/09/2012 - 12:59h

melhore esse script tbm

troque isso:

cd /var
mkdir backup
cd backup
mkdir usr
cd usr
mkdir local
cd local
mkdir nagios
mkdir etc
cd etc
mkdir email
cd /var/backup
mkdir etc
cd etc
mkdir vsftpd
mkdir mrtg
mkdir httpd
cd httpd
mkdir conf
mkdir conf.d
cd /var/backup
mkdir var
cd var
mkdir www
cd www
mkdir html
cd html
mkdir mrtg
cd /var/backup


por isso:

mkdir -p /var/backup/usr/local/nagios
mkdir -p /var/backup/usr/local/etc/email

mkdir -p /var/backup/etc/vsftpd
mkdir -p /var/backup/etc/mrtg
mkdir -p /var/backup/etc/httpd/conf
mkdir -p /var/backup/etc/httpd/conf.d

mkdir -p /var/backup/var/www/html/mrtg
cd /var/backup

8. Re: Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Enviado em 26/09/2012 - 13:02h

Valeu Douglas, depois que estiver funcionando, eu faço esse tipo de melhoria. Por enquanto quero mexer o mínimo possível só para fazer funcionar. obrigado.

9. Re: Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Enviado em 26/09/2012 - 13:04h

Quando você executa o contrab -e, nas primeiras linhas, deve ter setado o PATH, se não tiver, adicione da seguinte forma:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/bin:/usr/sbin
SHELL=/bin/bash


10. Re: Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Enviado em 26/09/2012 - 13:06h

DrNetwork escreveu:

*********
*Editado*
*********

Encontrei na net que deveria ter algo como

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

é isso que vc ta falando? Devo adicionar isso ao meu crontab?
EXATAMENTE! Adicione isso no início do seu crontab.

Perguntas: O script tem permissão de execução para todos usuários? Na dúvida, execute: chmod +x script.sh


11. use o tar

Enviado em 26/09/2012 - 15:01h

Seu script pode ser bastante simplificado se no lugar de simplesmente copiar os arquivos você realmente fizer um backup com tar que é muito mais seguro e a forma correta de preservar as permissões e dados dos arquivos.

A opção --files-from=FILE permite ter um catálogo dos diretorios e arquivos que você deseja incluir no backup.

Crie um arquivo chamado /root/backup.conf com VI ou outro editor de texto puro e inclua APENAS os diretórios ou arquivos que deseja fazer backup.

# insira isso em /root/backup.conf
/usr/local/nagios/
/usr/local/etc/email/
/etc/sudoers
/etc/mrtg
/etc/rc.local
/etc/vsftpd/
/etc/httpd/conf/
/etc/httpd/conf.d/
/var/www/html/mrtg/
/var/www/html/

Manter somente o último backup é uma estrategia fraca.
Tenha pelo menos 3 backups diferentes
Enviar o backup por e-mail, além de inseguro não é prático.
use SSH, scp ou RSYNC para pegar o backup e mandar para outra máquina ou simplesmente cópie para uma unidade de disco diferente.

O código abaixo pode ser uma sugestão para você começar implementar um script com tar...



#! /bin/bash

NEWBACKUP=$(date +%Y%m%d)

tar -pcf /var/backups/backup-$NEWBACKUP.tar --files-from=/root/backup.conf

if [ $? == 0 ]

then
echo "Criado novo backup em $NEWBACKUP" >> /var/log/backup.log
#...coloque aqui o aviso por e-mail em caso de sucesso

else
echo "Falha na criação de backup em $NEWBACKUP" >> /var/log/backup.log
#....coloque aqui o aviso por e-mail em caso de falha.....
exit 1

fi
exit 0


Olha no crontab não inclua somente o nome do script root/script.sh não é necessário incluir o sh antes....







12. Re: Script roda 100% manualmente, mas só em parte pelo crontab [RESOLVIDO]

Enviado em 27/09/2012 - 11:19h

jptudobem, coloquei as variáveis, mas não houve diferença. Pra que dar permissão para todos? Não basta o root ter permissão? A permissão dele já não é automática?

Kyetoy, sua sugestão do backup com tar é ótima. Vou estudá-la melhor e implementar. Quanto ao backup ser enviado para o email, isso é o que o dono quer (microempresa sem recursos).

Quanto ao crontab, não to mais usando o "crontab -e"... Quando boto uma hora específica pra rodar (tipo T +1 minuto) ele não vai. Alterei em /etc/cron.d/backup (um arquivo que criei). Esse sim roda legal e é todo colorido com o VIM (convenhamos, facilita a visualização).

Conteúdo do arquivo especificado acima:

***********************************
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
MAILTO=root
HOME=/
0 7 * * 5 root /root/backup.sh
***********************************

No entanto, o problema persiste. rodando manualmente, o backup chega na inbox do email especificado. Rodando pelo cron, ele cria o backup na máquina mas o email não chega na inbox.


Existe uma maneira da gente fazer um Debug disso?
01 02

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder