Varios scripts ao mesmo tempo! [RESOLVIDO]

13. Re: Varios scripts ao mesmo tempo! [RESOLVIDO]

edgar
edgaroliveirace

(usa Ubuntu)

Enviado em 22/08/2011 - 15:24h

ola mrk3004 gostei da sua soluçao e explicaçao, vou fazer um teste q depois eu postarei pra ver se deu certo!


  


14. Re: Varios scripts ao mesmo tempo! [RESOLVIDO]

Geraldo Albuquerque
AprendiNoLinux

(usa Ubuntu)

Enviado em 23/08/2011 - 11:32h

Encontrei este material e talvez possa ser uma outra forma de pensar em fazer o que precisa.

http://www.gnu.org/software/parallel/

http://www.youtube.com/watch?v=1ntxT-47VPA&feature=watch_response

As vezes pode ser usado várias máquinas para fazer o trabalho. Foi isto que entendi.


15. lista

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 23/08/2011 - 15:42h

bom, eu criaria uma lista com todos os scripts e depois criaria um procedimento de execução:
por exemplo:
#!/bin/bash
r=1
for i in `cat lista.txt`; do
./$i &
if [ `echo "$r % 20" | bc` -eq 0 ]; then
echo -ne " Esecutar mais 20? (s/n): "
read -n1 var
case $var in
n) exit;;
s) echo OK;;
*) echo "opcao invalida";;
esac
fi
r=`expr $r + 1`
done

esses script verifica o numero de vezes que o mesmo esta sendo executado, se for um multiplo de 20 ele para e pergunta se vc quer executar mais 20...
se bem que eu também nao intendi muito bem oq vc queria... ve se isso ajuda..


16. Varios scripts ao mesmo tempo!

edgar
edgaroliveirace

(usa Ubuntu)

Enviado em 26/08/2011 - 11:36h

ola hudyfx, bem vou explicar, eu tenho 60 scripts que acessa 60 servidores cada um acessar seu servidor e executa um comando. entao eu queria fazer um que executasse esses 60 scripts, mais queria que fosse exercutado sempre 20 scripts e nao todos de uma vez. conseguir colocar de 20 em 20, quando termina os 20 primeiros ele executa mais 20 e depois mais 20, queria saber se tem como colocar sempre 20 executando ao mesmo tem. estar executando 20 ao mesmo tempo dos 60, quando terminasse 1 ele pegasse outro sempre em 20 ao mesmo tempo.
Nao sei se ficou claro.


17. Re: Varios scripts ao mesmo tempo! [RESOLVIDO]

edgar
edgaroliveirace

(usa Ubuntu)

Enviado em 26/08/2011 - 11:44h

#!/bin/bash

loja="1" <= da loja 1 a 60
ddd="88" <= o ddd da cidade 85 88 86

route add -net 10.$ddd.$loja.0/24 gw 10.85.98.150 2>&-


data=`ls -lht /home/suporte/loja$loja.tar.bz2 | awk '{print $6}' 2>&-`
mv /home/suporte/loja$loja.tar.bz2 /backup/loja$loja.$data.tar.bz2 2>&-


if ping -c4 -w9 10.$ddd.$loja.1 2>&1 >/dev/null; then
sshpass -p senha ssh usuario@10.$ddd.$loja.1 /transf/loja$loja.sh exit
else
echo "LOJA$loja Sem Conexao de Rede" >> /transmissao/erro_lojas.txt
exit 0
fi


tar xjfv /home/suporte/loja$loja.tar.bz2 -C /sistemas/loja$loja
if [ $? = 0 ]; then
2>&-
else
echo "LOJA$loja Arquivo Corrompido" >> /transmissao/erro_lojas.txt
exit 0
fi

exit 0


cada script faz isso ai sao 60.


18. vamos tentar!!!

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 26/08/2011 - 15:08h

Cara, eu tenho certeza que essa modificação que fiz no seu codigo não atente oq vc precisa mas da pra dar uma ideia

to meio corrido aqui no trabalho, mas da um olhada e vc noque agente pode melhorar... ai agente acerta aos poucos

#!/bin/bash

loja=1 <= da loja 1 a 60
ddd="88 85 89 48 56 45 68 45 65 12 32 37 11 22 14 77 75 74 73 74 87 98 56 45 32 14 78 97 47" <= o ddd da cidade 85 88 86
[ -f tmp.txt ] || touch tmp.txt
for i in `cat $ddd`; do
echo $i >> tmp.txt
while [ `cat tmp.txt | wc -l` -le 20 ];do
(
route add -net 10.$ddd.$loja.0/24 gw 10.85.98.150 2>&-
data=`ls -lht /home/suporte/loja$loja.tar.bz2 | awk '{print $6}' 2>&-`
mv /home/suporte/loja$loja.tar.bz2 /backup/loja$loja.$data.tar.bz2 2>&-
if ping -c4 -w9 10.$ddd.$loja.1 2>&1 >/dev/null; then
sshpass -p senha ssh usuario@10.$ddd.$loja.1 /transf/loja$loja.sh exit
cat tmp.txt | grep -v $i > saida.txt; mv saida.txt tmp.txt
else
echo "LOJA$loja Sem Conexao de Rede" >> /transmissao/erro_lojas.txt
exit 0
fi
tar xjfv /home/suporte/loja$loja.tar.bz2 -C /sistemas/loja$loja
if [ $? = 0 ]; then
2>&-
else
echo "LOJA$loja Arquivo Corrompido" >> /transmissao/erro_lojas.txt
exit 0
fi
) &
done
loja=`expr $loja + 1`
done




19. Re: Varios scripts ao mesmo tempo! [RESOLVIDO]

edgar
edgaroliveirace

(usa Ubuntu)

Enviado em 26/08/2011 - 16:15h

#!/bin/bash

#--LOJAS 1 A 15
funcao1() {
for a in $(seq $1 $2); do
/usr/bin/time --format=%E -o /tmp/tempo_loja.$a /transmissao/lojas/loja$a.sh & echo "iniciado script $a com PID $!"
done
}
funcao1 1 15
wait

#--LOJAS 16 A 30
funcao2() {
for b in $(seq $1 $2); do
/usr/bin/time --format=%E -o /tmp/tempo_loja.$b /transmissao/lojas/loja$b.sh & echo "iniciado script $b com PID $!"
done
}
funcao2 16 30
wait

#--LOJAS 30 A 45
funcao3() {
for c in $(seq $1 $2); do
/usr/bin/time --format=%E -o /tmp/tempo_loja.$c /transmissao/lojas/loja$c.sh & echo "iniciado script $c com PID $!"
done
}
funcao3 30 45
wait

#--LOJAS 46 A 61
funcao4() {
for d in $(seq $1 $2); do
/usr/bin/time --format=%E -o /tmp/tempo_loja.$d /transmissao/lojas/loja$d.sh & echo "iniciado script $d com PID $!"
done
}
funcao4 46 61
wait

for x in /tmp/tempo_loja.* ;do
echo "Loja${x#*.} $(cat $x | cut -c1-5 | tr -d .)hrs" | sort >> /transmissao/tempo_total.txt
done
rm -rf /tmp/tempo_loja.* 2>&-

if [ -e != $(ls erro_lojas.txt 2>&-) ]; then
sendEmail -f usuario@provedor.com.br -t email_loja@loja.com.br -u "TRANSMISSOES DIARIAS" -o message-file=/transmissao/erro_lojas.txt -s smtp.mail.provedor.com:25 -xu usuario -xp senha
else
sendEmail -f usuario@provedor.com.br -t email_loja@loja.com.br -u "TRANSMISSOES DIARIAS" -m Transmissoes OK! -s smtp.mail.yahoo.com:25 -xu usuario -xp senha
fi

exit 0

ola hudyfx eu fiz esse ai, ele executa 20 em 20 e e cria um arquivo com o tempo de execuçao de cada script, quando termina os 20 primeiros ele executa os proximos 20, mais queria q ele sempre tivesse 20 scripts sendo executados ao mesmo tempo. estava vendo o seu mais nao entendir muito.


20. Re: Varios scripts ao mesmo tempo! [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/08/2011 - 16:29h

Assim amigo:

#!/bin/bash

#--LOJAS 1 A 15
funcao1() {
for a in $(seq $1 $2); do
/usr/bin/time --format=%E -o /tmp/tempo_loja.$a /transmissao/lojas/loja$a.sh & echo "iniciado script $a com PID $!"
done
}

#--LOJAS 16 A 30
funcao2() {
for b in $(seq $1 $2); do
/usr/bin/time --format=%E -o /tmp/tempo_loja.$b /transmissao/lojas/loja$b.sh & echo "iniciado script $b com PID $!"
done
}

#--LOJAS 30 A 45
funcao3() {
for c in $(seq $1 $2); do
/usr/bin/time --format=%E -o /tmp/tempo_loja.$c /transmissao/lojas/loja$c.sh & echo "iniciado script $c com PID $!"
done
}

#--LOJAS 46 A 61
funcao4() {
for d in $(seq $1 $2); do
/usr/bin/time --format=%E -o /tmp/tempo_loja.$d /transmissao/lojas/loja$d.sh & echo "iniciado script $d com PID $!"
done
}

funcao1 1 15 & funcao2 16 30 & funcao3 30 45 & funcao3 30 45 & funcao4 46 61 &
wait

for x in /tmp/tempo_loja.* ;do
echo "Loja${x#*.} $(cat $x | cut -c1-5 | tr -d .)hrs" | sort >> /transmissao/tempo_total.txt
done
rm -rf /tmp/tempo_loja.* 2>&-

if [ -e != $(ls erro_lojas.txt 2>&-) ]; then
sendEmail -f usuario@provedor.com.br -t email_loja@loja.com.br -u "TRANSMISSOES DIARIAS" -o message-file=/transmissao/erro_lojas.txt -s smtp.mail.provedor.com:25 -xu usuario -xp senha
else
sendEmail -f usuario@provedor.com.br -t email_loja@loja.com.br -u "TRANSMISSOES DIARIAS" -m Transmissoes OK! -s smtp.mail.yahoo.com:25 -xu usuario -xp senha
fi

exit 0


21. Re: Varios scripts ao mesmo tempo! [RESOLVIDO]

edgar
edgaroliveirace

(usa Ubuntu)

Enviado em 26/08/2011 - 18:04h

ola mrk3004 vc poderia explicar sobre o q vai acontecer nesse script q vc colocou, pq acho q ele estar fazendo os 60 ao mesmo tempo, queria que ele sempre executasse 20 quando termina 1 dos 20, executasse mais outro sempre 20 e nao tudo de uma vez.


22. Re: Varios scripts ao mesmo tempo! [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/08/2011 - 18:10h

Putz, tem razão, você quer só 20 xD

É simples, faça assim:

funcao1 1 15 && funcao2 16 30 && funcao3 30 45 && funcao3 30 45 && funcao4 46 61

com & nós criamos um subshell para cada função, já com && estamos executando uma função de cada vez, e o wait não é necessário pois só tem um shell


23. legal...

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 26/08/2011 - 18:12h

o, a dica do a migo ai em cima eh plausível.
mas pq vc nao usa apenas uma função ?
desse jeito
#!/bin/bash

#--LOJAS 1 A 15
funcao() {
for a in $(seq $1 $2); do
/usr/bin/time --format=%E -o /tmp/tempo_loja.$a /transmissao/lojas/loja$a.sh & echo "iniciado script $a com PID $!"
done
}

funcao 1 15 && funcao 16 30 && funcao 30 45 && funcao 30 45 && funcao 46 61

for x in /tmp/tempo_loja.* ;do
echo "Loja${x#*.} $(cat $x | cut -c1-5 | tr -d .)hrs" | sort >> /transmissao/tempo_total.txt
done
rm -rf /tmp/tempo_loja.* 2>&-

if [ -e != $(ls erro_lojas.txt 2>&-) ]; then
sendEmail -f usuario@provedor.com.br -t email_loja@loja.com.br -u "TRANSMISSOES DIARIAS" -o message-file=/transmissao/erro_lojas.txt -s smtp.mail.provedor.com:25 -xu usuario -xp senha
else
sendEmail -f usuario@provedor.com.br -t email_loja@loja.com.br -u "TRANSMISSOES DIARIAS" -m Transmissoes OK! -s smtp.mail.yahoo.com:25 -xu usuario -xp senha
fi

exit 0


24. Re: Varios scripts ao mesmo tempo! [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/08/2011 - 18:15h

@hudyfx kkkk Eu ri agora, nem tinha percebido que as funções eram as mesmas, tem toda razão, não precisa de funções diferentes para fazer a mesma coisa. E remova o wait, não precisa dele rs






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts