Shell Script não executa comando pela cron [RESOLVIDO]

1. Shell Script não executa comando pela cron [RESOLVIDO]

Valdinei Silva
admaxbr

(usa CentOS)

Enviado em 17/12/2012 - 19:49h

Pessoal,

Boa tarde,

Estou com um problema, tenho um shell script que faz backup de algumas coisas em meu server de lab, o que ocorre é que tenho uma parte do meu script que faz uma verificação se o disco esta presente pelo comando do fdisk, conforme abaixo:

#Verifica se o disco esta conectado na porta USB pelo DisIdentifier, caso nao avisa e finaliza
test=$( fdisk -l |grep "0x596187c6" )
if [ $? -eq 0 ]; then
echo "=================================================================" >> $log
echo "Disco de origem encontrado com sucesso, montando pasta..." >> $log
else
echo "=================================================================" >> $log
echo "Disco de origem nao encontrado, verifique, finalizando!!!" >> $log
echo "-----------------------FIM DO BACKUP-----------------------------" >> $log
SEND_EMAIL
exit 1
fi

obs: este é somente um pedaço do meu script, nesta parte que estou com problemas

Até ai tudo certo, se rodo manualmente /var/scripts/backups.sh ele vai de boa nesta parte, roda que é uma beleza, porém estou colocando este script na cron, para não precisar ficar rodando manualmente, na minha cron esta assim:

30 18 * * 1 /var/scripts/backups.sh

O que ocorre é que quando a cron roda ele esta executando o fdisk como um usuário comum e não como root, ou seja, como usuário comum o fdisk -l fica vazio com isso o grep não retorna nada e ele cai no else e finaliza. Estou editando a cron como usuário root, normalmente com "crontab -e" já vi diversas dicas aqui no forum mas nenhuma eu consegui fazer funcionar esta parte, ou seja rodar os comandos dentro do meu script como root quando eu adiciono na cron.

Obrigado desde já

Valdinei




  


2. Re: Shell Script não executa comando pela cron [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 17/12/2012 - 20:08h

Deixe seu cron desta forma:


30 18 * * 1 root /var/scripts/backups.sh


Dica: Sempre coloque o caminho completo em todos os seus scripts, assim evita erros quando vc executar o script a partir de outros diretórios


3. Re: Shell Script não executa comando pela cron [RESOLVIDO]

Valdinei Silva
admaxbr

(usa CentOS)

Enviado em 17/12/2012 - 20:22h

Mesmo assim não vai, assim ele sequer roda a tarefa, coloquei assim:

14 20 * * 1 root /var/scripts/backups.sh

Ele não executou nada, no log da cron não apareceu erro:

Dec 17 20:14:01 admax-lab crond[2106]: (root) RELOAD (/var/spool/cron/root)
Dec 17 20:14:01 admax-lab CROND[2691]: (root) CMD (root /var/scripts/backups.sh)

Estou usando CentOS 6.3 pela primeira vez, nas versões antigas funcionava normalmente o mesmo script, será que algo mudou? Já pesquisei bastante mas não achei nada a respeito que ajudasse.

Uma observação é que especificamente nesta parte do script e na parte que ele tenta montar o disco que esta dando erro, pois fiz um teste comentando as partes que esta dando erro e ele foi normalente, mesmo em partes que seria comandos somente de root, como criar diretorios dentro do /mnt, por exemplo, só não consigo entender porque exatamente esta ocorrendo isso :(





4. Re: Shell Script não executa comando pela cron [RESOLVIDO]

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 17/12/2012 - 20:23h

ou como root execute crontab -e e edite o cron do root

30 18 * * 1 /var/scripts/backups.sh >> /dev/null


5. Re: Shell Script não executa comando pela cron [RESOLVIDO]

Valdinei Silva
admaxbr

(usa CentOS)

Enviado em 17/12/2012 - 20:25h

Justamente, estou logado como root e executando crontab -e como root, conforme meu post anterior, verifiquei que ele esta rodando como root, porém especificamente neste pedaço do meu codigo que coloquei no primeiro post ele esta retornando vazio, mas quando rodo manualmente ele retorna o que desejo




6. Re: Shell Script não executa comando pela cron [RESOLVIDO]

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 17/12/2012 - 20:43h

admaxbr escreveu:

Justamente, estou logado como root e executando crontab -e como root, conforme meu post anterior, verifiquei que ele esta rodando como root, porém especificamente neste pedaço do meu codigo que coloquei no primeiro post ele esta retornando vazio, mas quando rodo manualmente ele retorna o que desejo



deu permissão para executar chmod +x /var/script/nome.sh ?


7. Re: Shell Script não executa comando pela cron [RESOLVIDO]

Valdinei Silva
admaxbr

(usa CentOS)

Enviado em 17/12/2012 - 20:53h

Sim, note que ele esta rodando o script, inclusive verifiquei que esta rodando como root, conforme abaixo:

Dec 17 20:22:01 admax-lab CROND[2740]: (root) CMD (/var/scripts/backups.sh)
Dec 17 20:30:01 admax-lab CROND[2764]: (root) CMD (/usr/lib/sa/sa1 1 1)
Dec 17 20:40:01 admax-lab CROND[2767]: (root) CMD (/usr/lib/sa/sa1 1 1)

Eu comentei as partes do meu scritp que estavam dando problemas e o resto rodou normalmente é exatamente em duas partes que estou com problemas, são elas:

#Verifica se o disco esta conectado na porta USB pelo DisIdentifier, caso nao avisa e finaliza
test=$( fdisk -l |grep "0x596187c6" )
if [ $? -eq 0 ]; then
echo "=================================================================" >> $log
echo "Disco de origem encontrado com sucesso, montando pasta..." >> $log
else
echo "=================================================================" >> $log
echo "Disco de origem nao encontrado, verifique, finalizando!!!" >> $log
echo "-----------------------FIM DO BACKUP-----------------------------" >> $log
SEND_EMAIL
exit 1
fi

Nesta a variavel test retorna vazio quando rodo pela cron e cai na regra do else, mas quando rodo manualmente ele retorna os valores que quero, e esta parte aqui:

#Monta o disco no ponto de montagem, caso de erro, avisa e finaliza backup
mount $disk $orig 2>> $error
if [ $? -eq 0 ]; then
echo "=================================================================" >> $log
echo "Disco montado com sucesso" >> $log
else
echo "=================================================================" >> $log
echo "Nao foi possivel montar o disco, verifique log de erro" >> $log
echo "-----------------------FIM DO BACKUP-----------------------------" >> $log
SEND_EMAIL
exit 1
fi

Neste aqui ele fala que não consegue montar pois não encontra o /mnt/externo que existe normalmente, no log de erro aparece isso:

mount: can't find /mnt/externo in /etc/fstab or /etc/mtab

Ou seja ele roda estas partes com erro pela cron, mas roda de boa quando rodo manualmente, porém não é problema mais da cron não rodar como root, ela esta rodando como root, são estas partes do meu código que estão com problemas quando é pela cron.



8. Re: Shell Script não executa comando pela cron [RESOLVIDO]

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 17/12/2012 - 20:56h

teste colocar o caminho completo para todos o executáveis que for iniciar pelo cron o próprio iptables se for rodar pelo cron tenho quer colocar o caminho completo:



test=$( /sbin/fdisk -l |grep "0x596187c6" )
if [ $? -eq 0 ]; then
echo "=================================================================" >> $log
echo "Disco de origem encontrado com sucesso, montando pasta..." >> $log
else
echo "=================================================================" >> $log
echo "Disco de origem nao encontrado, verifique, finalizando!!!" >> $log
echo "-----------------------FIM DO BACKUP-----------------------------" >> $log
SEND_EMAIL
exit 1
fi



9. Re: Shell Script não executa comando pela cron [RESOLVIDO]

André Canhadas
andrecanhadas

(usa Debian)

Enviado em 17/12/2012 - 21:09h

Ou tente jogar a saida para um arquivo para ver se mostra o erro:

30 18 * * 1 /var/scripts/backups.sh >> /root/logcron.log



10. Re: Shell Script não executa comando pela cron [RESOLVIDO]

Valdinei Silva
admaxbr

(usa CentOS)

Enviado em 17/12/2012 - 21:13h

andrecanhadas escreveu:

teste colocar o caminho completo para todos o executáveis que for iniciar pelo cron o próprio iptables se for rodar pelo cron tenho quer colocar o caminho completo:



test=$( /sbin/fdisk -l |grep "0x596187c6" )
if [ $? -eq 0 ]; then
echo "=================================================================" >> $log
echo "Disco de origem encontrado com sucesso, montando pasta..." >> $log
else
echo "=================================================================" >> $log
echo "Disco de origem nao encontrado, verifique, finalizando!!!" >> $log
echo "-----------------------FIM DO BACKUP-----------------------------" >> $log
SEND_EMAIL
exit 1
fi


Funcionou :)

Coloquei o caminho conforme falou e foi de boa agora pela cron, muito obrigado a todos pela ajuda!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts