Crontab - Loop 'For' ñ funciona [RESOLVIDO]

1. Crontab - Loop 'For' ñ funciona [RESOLVIDO]

Diego Tavares
diegoneto

(usa Outra)

Enviado em 15/03/2012 - 11:02h

Saudações a todos,

Tenho um script q funciona perfeitamente se eu executar a partir do prompt (execução através do caminho absoluto). Configurei sua execução de forma periódica no crontab. Ele funciona perfeitamente até o momento q ele precisa entrar em um loop 'for'. Depois disso ele para a execução.

Alguém tem alguma sugestão de como eu faço o cron interpretar o 'for'??

Abraços,
Diego Tavares


  


2. Re: Crontab - Loop 'For' ñ funciona [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 15/03/2012 - 11:10h

Pode ser que tenha algum erro em seu loop, poderia postar o trecho do seu script?


3. Re: Crontab - Loop 'For' ñ funciona [RESOLVIDO]

Diego Tavares
diegoneto

(usa Outra)

Enviado em 15/03/2012 - 11:25h

Segue abaixo o script:



#!/bin/bash

echo "# Hora de início: "`date`

# CONSTANTES

PastaRaiz="/home/cvna/Argo/"

ArqOSS=$PastaRaiz"Elementos/OSSs.txt"
ArqElementos=$PastaRaiz"Elementos/"

ArqComandos=$PastaRaiz"Comandos/Comandos.txt"

PstResult=$PastaRaiz"Resposta/"
PstResultSQL=$PastaRaiz"Resposta/SQL/"
PstResultErro=$PastaRaiz"Resposta/Erro/"

ArqResultOffline="Log_ERRO"

ArqBuscaPar=$PastaRaiz"Busca/BuscaPar_"
ArqBuscaRel=$PastaRaiz"Busca/BuscaRel_"

ArqResultTemp=$PastaRaiz"Resposta/Temp/Temp_"

BaseDadosSQL="cvna"
UsuarioSQL="cvna"
SenhaSQL="cvna"

DataTexto=`date +%Y%m%d`
Data=`date +%Y-%m-%d`

##################

OSS_Quant=`awk 'END { print NR }' $ArqOSS` # Extrai a quantidade de OSSs existentes no arquivo de OSSs

echo "######################################################"
echo "#"
echo "TESTE1"

rm -f $PstResultSQL*$DataTexto*
rm -f $PstResultErro*$DataTexto*

echo "TESTE2"

find $PstResultSQL -ctime +7 -delete
find $PstResultErro -ctime +7 -delete

echo "TESTE3"

###################
# INÍCIO DA ETAPA DE TELNET E ORDENAÇÃO DOS ARQUIVOS (CASO NECESSÁRIO)


for (( VarreOSS = 1 ; VarreOSS <= OSS_Quant ; VarreOSS++ ))
# Loop para pegar os nomes e IPs de cada OSS
do

echo "TESTE4"

OSS_Nome=`awk -v LinhaOSS=$VarreOSS 'NR == LinhaOSS { print $1 }' $ArqOSS`
OSS_IP=`awk -v LinhaOSS=$VarreOSS 'NR == LinhaOSS { print $2 }' $ArqOSS`
OSS_Porta=`awk -v LinhaOSS=$VarreOSS 'NR == LinhaOSS { print $3 }' $ArqOSS`
OSS_User=`awk -v LinhaOSS=$VarreOSS 'NR == LinhaOSS { print $4 }' $ArqOSS`
OSS_Pass=`awk -v LinhaOSS=$VarreOSS 'NR == LinhaOSS { print $5 }' $ArqOSS`

TipoElemento1="MSC"
TipoElemento2="HLR"

Elemento_Quant1=`awk 'END { print NR }' $ArqElementos$TipoElemento1"s_"$OSS_Nome.txt`
Elemento_Quant2=`awk 'END { print NR }' $ArqElementos$TipoElemento2"s_"$OSS_Nome.txt`

echo "# OSS em execução: $OSS_Nome"
echo "#"
echo "# "$TipoElemento1"s existentes: $Elemento_Quant1"
echo "# "$TipoElemento2"s existentes: $Elemento_Quant2"
echo "#"

/home/cvna/Argo/Script/Argo_Elementos.sh $OSS_Nome $OSS_IP $OSS_Porta $OSS_User $OSS_Pass $TipoElemento2 $Elemento_Quant2 $ArqElementos $ArqComandos $PstResult $PstResultSQL $PstResultErro $ArqResultOffline $ArqBuscaPar $ArqBuscaRel $ArqResultTemp $DataTexto $Data $BaseDadosDQL $UsuarioSQL $SenhaSQL &
/home/cvna/Argo/Script/Argo_Elementos.sh $OSS_Nome $OSS_IP $OSS_Porta $OSS_User $OSS_Pass $TipoElemento1 $Elemento_Quant1 $ArqElementos $ArqComandos $PstResult $PstResultSQL $PstResultErro $ArqResultOffline $ArqBuscaPar $ArqBuscaRel $ArqResultTemp $DataTexto $Data $BaseDadosDQL $UsuarioSQL $SenhaSQL

done

echo "# Hora de término: "`date`



A saída q eu tenho dele é:



# Hora de início: Thu Mar 15 10:45:01 BRT 2012
#####################################################
#
TESTE1
TESTE2
TESTE3




4. Re: Crontab - Loop 'For' ñ funciona [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 15/03/2012 - 12:42h

Você pode deixar o seu cron com a saída de erros para um arquivo texto, assim consegue verificar o que está travando o mesmo.

Por exemplo:

30 10 * * * /opt/script.sh 2> /tmp/saida.txt

Depois verifique o /tmp/saida.txt, pois aí estará somente os erros.
Caso vc não consiga identificar, cole aqui o conteúdo do arquivo /tmp/saida.txt pra analisarmos.


5. Re: Crontab - Loop 'For' ñ funciona [RESOLVIDO]

Diego Tavares
diegoneto

(usa Outra)

Enviado em 15/03/2012 - 16:41h

Cara, segue abaixo o log do cron:



+ date
+ echo # Hora de início: Thu Mar 15 16:40:01 BRT 2012
+ PastaRaiz=/home/cvna/Argo/
+ ArqOSS=/home/cvna/Argo/Elementos/OSSs.txt
+ ArqElementos=/home/cvna/Argo/Elementos/
+ ArqComandos=/home/cvna/Argo/Comandos/Comandos.txt
+ PstResult=/home/cvna/Argo/Resposta/
+ PstResultSQL=/home/cvna/Argo/Resposta/SQL/
+ PstResultErro=/home/cvna/Argo/Resposta/Erro/
+ ArqResultOffline=Log_ERRO
+ ArqBuscaPar=/home/cvna/Argo/Busca/BuscaPar_
+ ArqBuscaRel=/home/cvna/Argo/Busca/BuscaRel_
+ ArqResultTemp=/home/cvna/Argo/Resposta/Temp/Temp_
+ BaseDadosSQL=argo
+ UsuarioSQL=cvna
+ SenhaSQL=cvna
+ date +%Y%m%d
+ DataTexto=20120315
+ date +%Y-%m-%d
+ Data=2012-03-15
+ awk END { print NR } /home/cvna/Argo/Elementos/OSSs.txt
+ OSS_Quant=3
+ echo #############################################
+ echo #
+ echo TESTE1
+ rm -f /home/cvna/Argo/Resposta/SQL/*20120315*
+ rm -f /home/cvna/Argo/Resposta/Erro/*20120315*
+ echo TESTE2
+ find /home/cvna/Argo/Resposta/SQL/ -ctime +7 -delete
+ find /home/cvna/Argo/Resposta/Erro/ -ctime +7 -delete
+ echo TESTE3
/home/cvna/Argo/Script/Argo.sh: 79: Syntax error: Bad for loop variable



Parece q o problema é realmente no loop, mas fora isso, eu ñ tenho idéia p/onde seguir. Vc tem alguma sugestão??


6. Re: Crontab - Loop 'For' ñ funciona [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 15/03/2012 - 18:09h

Pelo que vi, o seu for está errado! Vc precisa inserir um $ na frente do OSS_Quant, pois trata-se de uma variável:

for (( VarreOSS = 1 ; VarreOSS <= $OSS_Quant ; VarreOSS++ ))

Veja se roda!



7. Re: Crontab - Loop 'For' ñ funciona [RESOLVIDO]

Diego Tavares
diegoneto

(usa Outra)

Enviado em 15/03/2012 - 18:41h

Mesma coisa. Embora mesmo sem essa alteração, o script roda manualmente sem problema.



+ date
+ echo # Hora de início: Thu Mar 15 18:40:01 BRT 2012
+ PastaRaiz=/home/cvna/Argo/
+ ArqOSS=/home/cvna/Argo/Elementos/OSSs.txt
+ ArqElementos=/home/cvna/Argo/Elementos/
+ ArqComandos=/home/cvna/Argo/Comandos/Comandos.txt
+ PstResult=/home/cvna/Argo/Resposta/
+ PstResultSQL=/home/cvna/Argo/Resposta/SQL/
+ PstResultErro=/home/cvna/Argo/Resposta/Erro/
+ ArqResultOffline=Log_ERRO
+ ArqBuscaPar=/home/cvna/Argo/Busca/BuscaPar_
+ ArqBuscaRel=/home/cvna/Argo/Busca/BuscaRel_
+ ArqResultTemp=/home/cvna/Argo/Resposta/Temp/Temp_
+ BaseDadosSQL=argo
+ UsuarioSQL=cvna
+ SenhaSQL=cvna
+ date +%Y%m%d
+ DataTexto=20120315
+ date +%Y-%m-%d
+ Data=2012-03-15
+ awk END { print NR } /home/cvna/Argo/Elementos/OSSs.txt
+ OSS_Quant=3
+ echo ################################################
+ echo #
+ rm -f /home/cvna/Argo/Resposta/SQL/BHE_HLR_SYRIP_20120315.txt
+ rm -f /home/cvna/Argo/Resposta/Erro/*20120315*
+ find /home/cvna/Argo/Resposta/SQL/ -ctime +7 -delete
+ find /home/cvna/Argo/Resposta/Erro/ -ctime +7 -delete
/home/cvna/Argo/Script/Argo.sh: 72: Syntax error: Bad for loop variable





8. Re: Crontab - Loop 'For' ñ funciona [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 15/03/2012 - 18:51h

Vi outro detalhe aí no seu script..

Coloque 2 vezes o &, ficaria desta forma:

 

/home/cvna/Argo/Script/Argo_Elementos.sh $OSS_Nome $OSS_IP $OSS_Porta $OSS_User $OSS_Pass $TipoElemento2 $Elemento_Quant2 $ArqElementos $ArqComandos $PstResult $PstResultSQL $PstResultErro $ArqResultOffline $ArqBuscaPar $ArqBuscaRel $ArqResultTemp $DataTexto $Data $BaseDadosDQL $UsuarioSQL $SenhaSQL && \

/home/cvna/Argo/Script/Argo_Elementos.sh $OSS_Nome $OSS_IP $OSS_Porta $OSS_User $OSS_Pass $TipoElemento1 $Elemento_Quant1 $ArqElementos $ArqComandos $PstResult $PstResultSQL $PstResultErro $ArqResultOffline $ArqBuscaPar $ArqBuscaRel $ArqResultTemp $DataTexto $Data $BaseDadosDQL $UsuarioSQL $SenhaSQL



Espero que agora de certo!


9. Re: Crontab - Loop 'For' ñ funciona [RESOLVIDO]

Diego Tavares
diegoneto

(usa Outra)

Enviado em 16/03/2012 - 11:44h

FOI!!!

Na verdade ñ tinha nada de errado com o código, mas sim na tarefa do cron. Ñ fui eu q inseriu a tarefa no cron e tb por ser a primeira vez q mexi no programa, ñ me atentei aos detalhes.

A tarefa no cron estava configurada assim:


43 09 * * * sh /home/cvna/Argo/Script/Argo.sh 2> /home/cvna/Argo/Script/Argo.log


Note o "sh" antes do script a ser executado.

Retirei o "sh":


43 09 * * * /home/cvna/Argo/Script/Argo.sh 2> /home/cvna/Argo/Script/Argo.log


E FOI!!! \o/ \o/ \o/

Na verdade a tarefa ainda está em execução, mas tá indo sem problemas até agora!!

Muito obrigado pela ajuda!!