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!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts