[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Shell Script
From: |
Diego Framill |
Subject: |
Re: [shell-script] Shell Script |
Date: |
Fri, 1 Mar 2002 11:00:47 -0300 |
ok, manda pra mim tambem! :)
aparentemente todos querem, entao manda pra lista toda...
-----Mensagem Original-----
De: "Walter" <address@hidden>
Para: <address@hidden>
Enviada em: sexta-feira, 1 de março de 2002 09:36
Assunto: Re: [shell-script] Shell Script
Tambem tenho interesse em uma cópia...
Valeu
Walter
----- Original Message -----
From: "Julio Cezar Neves - DISB.O" <address@hidden>
To: <address@hidden>
Sent: Thursday, February 28, 2002 11:29 AM
Subject: RES: [shell-script] Shell Script
Oi Teresa,
sem dúvida alguma, o melhor a fazer é utilizar named-pipes ou FIFO. Acabei
de escrever uma seção sobre o assunto que será incorporada à terceira edição
do meu livro, que traz como exemplo um caso bastante parecido com o que vc
precisa. Trata-se da simulação de lock em bancos. Quem quiser me peça que a
envio em um anexo (.doc). É um texto com várias páginas.
Não tentei entender a sua lógica por absoluta falta de tempo, porém para
rapidamente poder te ajudar vou colocar um resumo do que deve ser feito:
prompt> mkfifo pipe1
prompt> ls -l pipe1
prw-r--r-- 1 jneves ssup 0 Jan 24 16:54 pipe1
# Note que o arquivo pipe1 é do tipo "p"
No final do prg R.SH coloque o seguinte comando:
echo "Dispara R1.SH" > pipe1
Inicie o programa R1.SH da seguinte maneira:
Disparo=
while [ "$Disparo" != "Dispara R1.SH" ]
do
Disparo=`cat pipe1`
done
Pode ficar despreocupada que vc não está criando um loop furioso que exaure
todos os recursos da máquina. O named-pipe precisa de um processo "falador"
e de um "ouvidor". Enquanto os 2 não estiverem presentes o que estiver na
ponta do pipe estará em modo de espera.
Coloquei o while só porque não conheço a sincronização dos seus processos e
pode ser que vc use o pipe para diversas mensagens. Coloque na saída do
R1.SH a seguinte linha:
echo "Dispara R2.SH" > pipe1
Inicie o programa R2.SH da seguinte maneira:
Disparo=
while [ "$Disparo" != "Dispara R2.SH" ]
do
Disparo=`cat pipe1`
done
Pronto! Ai está! Limpo e seguro.
[ ]s,
Julio Cezar Neves.
Em tempo: abra 2 seções e faça testes direto no prompt para vc entender
melhor este mecanismo. É sensacional para sincronização de processos.
-----Mensagem original-----
De: saghui [mailto:address@hidden]
Enviada em: quinta-feira, 28 de fevereiro de 2002 08:23
Para: address@hidden
Assunto: [shell-script] Shell Script
Olá.
Estou com um problema que espero que um de voces me possa ajudar.
:)
Eu tenho uma shell script (R.SH) que chama outras duas (R1.sh e
R2.sh) para fazer o seguinte:
A primeira rotina (R1) chama o sql*loader para que este carregue uma
tabela no oracle.
A segunda rotina (R2)tem instruções sql para fazer o rebuild dos
índices da tabela que está a ser carregada na R1.
É aqui que começa o meu problema ...
:(
O unix lança a instrução do rebuild (R2.sh) sem antes ter terminado o
load dos dados na tabela (R1.sh).
Claro que depois não faz o rebuild porque a tabela oracle está a ser
acedida pelo sql*loader....
:(
A única solução que eu arranjei foi executar o sql*loader, e depois
pesquisar se existe algum processo
sqldr a correr no unix e, enquanto existir, fazer sleeps de 300
segundos !
Mas esta solução não me agrada muito ... porque vou ter de correr
esta rotina várias vezes e, umas vezes 300 segundos é muito
tempo e, outras vezes, 300 segundos é pouco ...
O que eu gostaria de saber é se existe algum parâmetro (tipo wait)
que eu possa colocar na rotina unix de forma
a que a minha rotina R2.sh só seja executada quando a rotina R1.sh
termine ...
Alguém sabe se existe ? Podem ajudar-me ?
Obrigada!
Teresa
As rotinas são estas:
### R.SH ###
DIR_KSH=/net/dev-utdad1/Desenv_UTDAD001/ksh
. $DIR_KSH/R1.sh
. $DIR_KSH/R2.sh
### R1.sh ###
DATE=`(date '+%Y%m%d')`
USER=tmc
PASSWORD=:)
BD=sa
DIR_INP=/net/dev-utdad1/Desenv_UTDAD001/inp/ff_tratados
FICH_CTL=dwtrmostl.ctl
FICH_DAT=dwtrmostl.dat
DIR_LOG=/net/dev-utdad1/Desenv_UTDAD001/logs
sqlldr $USER/$PASSWORD@$BD control=$DIR_INP/$FICH_CTL data=$DIR_INP/
$FICH_DAT log=$DIR_LOG/dwtrmostl.log bad=$DIR_LOG/dwtrmostl.bad
DIRECT=TRUE SILENT=FEEDBACK SKIP_INDEX_MAINTENANCE=TRUE SKIP=0 &
i=1
while [ $i -ne 30 ] ; do
if [ `ps -futmc | grep "sqldr" | grep -v "grep" | wc -l` != 0 ]
then
sleep 300
i=0
echo dormi 300
fi
i=`expr $i + 1`
echo $i no while
done
#### R2.sh #####
spool /net/dev-utdad1/Desenv_UTDAD001/logs/DWTrmostlRebuildIndex.log
set timing on
ALTER TABLE dw_t_rmo_stl MODIFY PARTITION dw_t_rmo_stl_p1 REBUILD
UNUSABLE LOCAL INDEXES;
spool off
exit
Sair da lista: address@hidden
Banco Dados: http://www.egroups.com/group/shell-script
Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html
Sair da lista: address@hidden
Banco Dados: http://www.egroups.com/group/shell-script
Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html
Sair da lista: address@hidden
Banco Dados: http://www.egroups.com/group/shell-script
Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html