shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Duvida - nohup / wait


From: OBD ( Stormfish )
Subject: Re: Duvida - nohup / wait
Date: Tue, 16 Jun 2009 21:19:55 -0000
User-agent: eGroups-EW/0.82

Fala Cesar ...
Lembro das suas dicas na epoca dos "news" do UOL .
Voltando as duvidas, acho que você não entendeu direito a minha duvida então, 
resolvi colocar o script ( resumido, abaixo ) para tentar me explicar melhor .
A duvida esta nas linhas que começam com "(nohup 
${MAIN_DIR}${BIN}/FL_STG_EFA0RCVNT_RECEIVING.sh "${parm1}" "${parm2}" 
"${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" "${MAIN_DIR}${LOG}") &"  

eu quero que o script apenas de prosseguimento e encerre quando estes 
sub-shells estiverem concluidos ... a principio, eu não estou conseguindo isto 
:-(


################### COMECA AQUI ##############

#! /bin/sh
set -x
#########################################################################
#                                                                       #
#  Nome do Script : extract_fl_stg.sh                                   #
#  Autor : Obede Sant'Ana                                               #
#  Data  : 10/06/2009                                                   #
#  Objetivo :extracao de dados                                          #
#  Parametros :                                                         #
#  parm1 - usuario                                                      #
#  parm2 - password                                                     #
#  parm3 - dia de inicio da extracao                                    #
#  parm4 - mes de inicio da extracao                                    #
#  parm5 - ano de inicio da extracao                                    #
#                                                                       #
#  Dependencias :                                                       #
#    1) arquivo de parametros "extract_fl_stg" no diretorio             #
#       /home/<user>/parm                                               #
#                                                                       #
#  uso :                                                                #
#                                                                       #
#  Modificacoes :                                                       #
#     Autor :                                                           #
#     Data  :                                                           #
#     Objetivo :                                                        #
#                                                                       #
#########################################################################

start_env()
{
   echo '*********** EXECUTANDO START_ENV ***************'
   ### Oracle ###
   ORACLE_HOME=/tcvrdi/oracle/product/920
   export ORACLE_HOME
   ORACLE_BIN=${ORACLE_HOME}/bin
   export ORACLE_BIN
   ORACLE_LIB=${ORACLE_HOME}/lib
   export ORACLE_LIB
   NLS_LANG=AMERICAN_AMERICA.WE8DEC
   export NLS_LANG
   ORACLE_SID=tcvrdi
   export ORACLE_SID

   ### Outras  ####
   PATH=${PATH}:.:${ORACLE_HOME}:${ORACLE_BIN}:${ORACLE_LIB}:/usr/bin/
   export PATH
   MAIN_DIR='/home/<user>/'
   export MAIN_DIR
   OUTBOUND='/outbound'
   export OUTBOUND
   PARM='/parm'
   export PARM
   BIN='/bin'
   export BIN
   LOG='/log'
   export LOG
   TEMP='/temp'
   export TEMP
   START_DATE=`/usr/bin/date '+%d%m%Y%H%M%S'` # Data a ser passada para formatar
                                              # nomes dos arquivos gerados
   export START_DATE
   ERROR_CODE=0          # codigo de erro diferente de 0 indica falha
   export ERROR_CODE
   MAIN_LOG_FILE=${MAIN_DIR}${LOG}/extract_fl_stg_${START_DATE}.log
   export MAIN_LOG_FILE
   ARQ_PARAM=`echo ${MAIN_DIR}${PARM}/extract_fl_stg`
   parm1=`grep PARM1 /transfer/elo/fin/parm/extract_fl_stg|awk -F= '{print $2}'`
   parm2=`grep 'PARM2' ${ARQ_PARAM}|awk -F= '{print $2}'`
   parm3=`grep 'PARM3' ${ARQ_PARAM}|awk -F= '{print $2}'`
   parm4=`grep 'PARM4' ${ARQ_PARAM}|awk -F= '{print $2}'`
   parm5=`grep 'PARM5' ${ARQ_PARAM}|awk -F= '{print $2}'`

   # CONSTANTES
   TOTAL_ARQUIVOS=29
}
start_log()
{
   echo '**************** EXECUTANDO START_LOG **********************'
   echo "Inicio do processo de extracao de dados - data:`/usr/bin/date` " >> 
${MAIN_LOG_FILE}
   echo "******** Parametros passados **********"   >> ${MAIN_LOG_FILE}
   echo "Periodo da extracao: "  >> ${MAIN_LOG_FILE}
   echo "Data de Inicio  : ${parm3}/${parm4}/${parm5}"  >> ${MAIN_LOG_FILE}
   echo "Data de Fim     : Sem Data Informada"  >> ${MAIN_LOG_FILE}
   echo ""                        >> ${LOG_FILE}
}   

valida()
{
   ERROR_CODE=0

  if [ $# -lt 0 ]; then
      echo "*******************************************" >> ${MAIN_LOG_FILE}
      echo "ERROR :Numero de argumentos invalido! > $# " >> ${MAIN_LOG_FILE}
      echo "*******************************************" >> ${MAIN_LOG_FILE}
      ERROR_CODE=3
      exit ${ERROR_CODE}
   fi

   return ${ERROR_CODE}
}

verifica_arquivos()
{
   
   QTD_ARQ=`ls ${MAIN_DIR}${TEMP}/FL_STG_EF*${START_DATE}.txt|wc -l`
   #if [ ${QTD_ARQ} -ne ${TOTAL_ARQUIVOS} ]
   if [ ${QTD_ARQ} -ne 29 ]
   then
      echo "*********************************************************" >> 
${MAIN_LOG_FILE}
      echo "ERROR - Nao foram gerados todos os arquivos de extracao !" >> 
${MAIN_LOG_FILE}
      echo "*********************************************************" >> 
${MAIN_LOG_FILE}
      ERROR_CODE=4
   else
      for ARQ_STG in `ls ${MAIN_DIR}${TEMP}/FL_STG_EF*${START_DATE}.log`
      do
        ARQ_STG_MAIN=`${ARQ_STG}|cut -f1 -d"."`
        QTD_ERROR=`grep -c Erro ${ARQ_STG}`
        if [ QTD_ERRO -gt 0 ]
        then
           ERROR_CODE=5
           echo "************************************************************" 
>> ${MAIN_LOG_FILE}
           echo "ERROR : Arquivo ${ARQ_STG_MAIN}.txt concluido com erro !    " 
>> ${MAIN_LOG_FILE}
           echo "ERROR : Verifique o arquivo ${ARQ_STG} para maiores detalhes" 
>> ${MAIN_LOG_FILE}
           echo "************************************************************" 
>> ${MAIN_LOG_FILE}           
        else
           ERROR_CODE=0
        fi
      done      
      return ${ERROR_CODE}

   fi
}

#atualiza_parametros()
#{
#
#}

#### function main #####
###main######
#   trap '' TTOU
#   . /etc/profile
#   set +x
   start_env
   # Inicializa log
   start_log
   # Valida parametros
   if [ -f ${MAIN_DIR}${PARM}/extract_fl_stg ]
   then
      valida
      ERROR_CODE=$?
   else
      ERROR_CODE=2
      echo "************************************************************" >> 
${MAIN_LOG_FILE}
      echo "ERROR : Arquivo ${ARQ_STG_MAIN}.txt concluido com erro !    " >> 
${MAIN_LOG_FILE}
      echo "ERROR : Verifique o arquivo ${ARQ_STG} para maiores detalhes" >> 
${MAIN_LOG_FILE}
      echo "************************************************************" >> 
${MAIN_LOG_FILE} 
   fi
   
   if [ ${ERROR_CODE} -ne 0 ]
   then
      exit ${ERROR_CODE}
   else
      # se paramatros estao ok, inicia extracao de dados 
      (nohup ${MAIN_DIR}${BIN}/FL_STG_EFA0RCVNT_RECEIVING.sh "${parm1}" 
"${parm2}" "${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" 
"${MAIN_DIR}${LOG}") &
      (nohup ${MAIN_DIR}${BIN}/FL_STG_EFA4INVDT_AR_INV_DETAIL.sh "${parm1}" 
"${parm2}" "${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" 
"${MAIN_DIR}${LOG}") &
      (nohup ${MAIN_DIR}${BIN}/FL_STG_EFAAPDGRT_PAYMENT_DOC_GR.sh "${parm1}" 
"${parm2}" "${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" 
"${MAIN_DIR}${LOG}") &
      (nohup ${MAIN_DIR}${BIN}/FL_STG_EFABSTPYT_PAYMENT_STATUS.sh "${parm1}" 
"${parm2}" "${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" 
"${MAIN_DIR}${LOG}") &
      (nohup ${MAIN_DIR}${BIN}/FL_STG_EFACMTPYT_PAYMENT_METHOD.sh "${parm1}" 
"${parm2}" "${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" 
"${MAIN_DIR}${LOG}") &
      (nohup ${MAIN_DIR}${BIN}/FL_STG_EFADFDCTT_FINAN_DOC_TYPE.sh "${parm1}" 
"${parm2}" "${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" 
"${MAIN_DIR}${LOG}") &
      (nohup ${MAIN_DIR}${BIN}/FL_STG_EFAEFNDST_FINAN_DOC_ST.sh "${parm1}" 
"${parm2}" "${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" 
"${MAIN_DIR}${LOG}") &
      (nohup ${MAIN_DIR}${BIN}/FL_STG_EFAFFDCT_FINAN_DOC_AP.sh "${parm1}" 
"${parm2}" "${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" 
"${MAIN_DIR}${LOG}") &
      (nohup ${MAIN_DIR}${BIN}/FL_STG_EFBCPAYMT_PAYMENT.sh "${parm1}" 
"${parm2}" "${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" 
"${MAIN_DIR}${LOG}") &
      (nohup ${MAIN_DIR}${BIN}/FL_STG_EFAVINDTT_AP_INST_DETAIL.sh "${parm1}" 
"${parm2}" "${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" 
"${MAIN_DIR}${LOG}") &
      (nohup "${MAIN_DIR}${BIN}"/FL_STG_EFBAARIAT_REC_INST_ALLOT.sh "${parm1}" 
"${parm2}" "${parm5}" "${parm4}" "${parm3}" "${MAIN_DIR}${LOG}" 
"${MAIN_DIR}${LOG}") &
      wait

      
   fi
   verifica_arquivos
#   atualiza_parametros
########################## TERMINA AQUI ################

--- Em address@hidden, César A. K. Grossmann <cesarakg@...> escreveu
>
> --- Em address@hidden, "OBD ( Stormfish )" <malakh_rj@> escreveu
> >
> > Alguém pode me dar uma indicação de como usar o "nohup" e/ou "wait" para 
> > conseguir isto ? ( ou devo usar outro comando ?
> 
> Eu usei um trap para interceptar o Ctrl-C que eu uso para terminar um script, 
> e um pkill com o número do processo "pai" para matar todos os processos 
> filhos.
> 
> Veja a seguinte mensagem no grupo (meu script):
> 
> http://br.groups.yahoo.com/group/shell-script/message/29428
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]