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

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

Re: [shell-script] Estrutura de script para criar fila de espera


From: Julio C. Neves
Subject: Re: [shell-script] Estrutura de script para criar fila de espera
Date: Sun, 20 Sep 2015 11:24:56 -0300

Pode ser feito de 2 formas:
1 - Vc teria um disparador em loop:

Proc='^^^^----'
while true
do
    while ps aux | grep "\<$Proc\>" | grep -qv grep
    do
        sleep 5
    done
    ./Teu_prg &
    Proc=$!
done

2 - Usando named pipes
mkfifo tubo

o seu processo começa com um cat tubo e termina com um echo xx > tubo

Qdo a 2ª instância for disparada, ela ficará enfileirada esperando chegar algo pelo tubo. Isso só virá quando a 1ª instância terminar e mandar um xx para tubo.

Abcs,
Julio
@juliobash

P
róximos cursos de Shell
Cidade         Local Período
São Paulo 4Linux 21/09 a 25/09
São Paulo 4Linux 07/12 a 11/12
Dou treinamento de Shell em qualquer cidade.
Para mais detalhes, me mande um e-mail.

Se vc ainda usa Windows e não gosta de malwares, baixe o
LibreOffice somente em https://pt-br.libreoffice.org/


Em 17 de setembro de 2015 11:29, Robson Alexandre address@hidden [shell-script] <address@hidden> escreveu:
 

Bom dia a todos,

gostaria de saber a opinião dos colegas da lista e inclusive sugestões para seguinte demanda que estou a decidir qual a melhor maneira de se fazer.

Uma rotina que é disparada por um usuário qualquer e caso esta rotina já esteja em execução, cria-se uma fila de espera q é executada imediatamente após o término da anterior.

Bom, parece simples, é só colocar o script da rotina para chamar o próximo caso haja fila de espera, mas qual seria a melhor forma de realizar esse script?

Pensei em algo do tipo

cat <<EOF > script

#!/bin/bash
dir=/caminho/app

ps -C $0 || {
echo Executando rotina...
sleep 20  #simulando tempo de execução da rotina

queue=( $(wc -l $dir/queue) )
[ ${queue[0]} -gt 0 ] && at now + 1 minutes <<< "$(sed '1!d' $dir/queue; sed -i '1d' $dir/queue)"
} && {
echo $0 $* >> $dir/queue
}
EOF

cat <<EOF > queue
/caminho/app/script param1 param2 paramN
/caminho/app/script paramY paramX paramN
/caminho/app/script parama paramb paramN

EOF

Gostaria de opiniões e sugestões sobre desde o método para verificar se a rotina já está em execução (ps -C $0), até o uso do at para agendar o próximo da fila.
Alguém já fez algo parecido? Já tem alguma coisa implementada?

Atenciosamente
Robson Alexandre



reply via email to

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