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

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

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


From: Rodrigo Tenorio
Subject: Re: [shell-script] Re: Estrutura de script para criar fila de espera
Date: Fri, 18 Sep 2015 19:13:44 -0300

Obrigado Itamar.

Então. Estive pesquisando a respeito e cheguei na ideia que demonstro abaixo.
Não testei, mas talvez sirva para alguma coisa.

Por favor, comentem.
:)

*** Para desencargo de consciência eu colocaria dois a cinco segundos de espera no início do "execRotina"...

[ ! -f "$dir/$0.pids" ] && {
execRotina &
pidAtual=$!
echo $pidAtual > "$dir/$0.pids"
wait $pidAtual

} || {
queue=$(wc -l < "$dir/$0.pids")
[ $queue -ge 5 ] && {
#Só para não deixar nego abusar da fila...
echo ERRO :: Limite de fila atingido.
echo         Tente mais tarde.
exit 1;
} || {
execRotina &
pidAtual=$!
echo $pidAtual >> "$dir/$0.pids"
kill -SIGSTOP $pidAtual
echo AVISO :: Processo em execução encontrado.
echo          Execução atual colocada em espera.
echo          Aguarde que ela será retomada em breve.

wait $pidAtual

}
}

sed -i '1d' "$dir/$0.pids"

queue=$(wc -l < "$dir/$0.pids")

[ $queue -ge 1 ] && {

pidProx=$(sed -n '/./{p;q;}' "$dir/$0.pids")

[ -z "$pidProx" ] && {

sed -i '1d' "$dir/$0.pids"

kill -SIGCONT $pidProx

} || {

rm "$dir/$0.pids"

}
} || {

rm "$dir/$0.pids"

}

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

Fernando,
não tinha pensado no wait. Mas como poderia referenciar a ordem da fila para a terceira, quarta, quinta chamadas do script?
Como dito pelo Itamar, preciso do pid das rotinas para ordená-las.

Itamar e Rodrigo, vcs estão completamente certos. Eu teria de gravar o pid da primeira chamada do script p.e. em /var/run/script.pid e consultar se pid atual é igual a pid em script.pid. Acredito q assim, esse arquivo sirva como uma espécie de lock e a informação do primeiro processo executado.

[ ! -f $dir/script.pid ] && {
echo $$ > $dir/script.pid
} || {
    ps -p $(cat $dir/script.pid) || {
        processos=( $(pgrep $0) )
        [ ${#processos[@]} -eq 1 ] && echo $$ > $dir/script.pid || { echo ERRO: Execução da rotina interrompida; exit 1; }
    }
}
pid=$(cat $dir/script.pid)
[ $$ -ne $pid ] || {
    execRotina
    rm /var/run/script.pid
    execScriptSeTiverQueue
} && {
    addQueue
}

EOF



Atenciosamente
Robson Alexandre


Em Qui, 17 de set de 2015 14:44, Rodrigo Tenorio address@hidden [shell-script] <address@hidden> escreveu:
 

Obrigado, Itamar.

Então se eu estou certo, seria algo do tipo:

vOutroPid=$(pgrep "$0" | grep -v "$$");

[ -z "$vOutroPid" ] Echo "Executa rotina" || Echo "Add Queue";

Com isso, em teoria seria possível a própria rotina saber se há outra instancia dela em execução.
Certo?





Em 17 de setembro de 2015 14:19, address@hidden [shell-script] <address@hidden> escreveu:
 

Respondendo ao Rodrigo


O script pode saber seu próprio script invocando "$$":

As vezes uso a variável no nome de arquivos temporários que um script precise usar.

Um comando interessante para saber todos os PID's de um determinado comando é o "pgrep". Acredito que sirva para o propósito que sugere.

[]'s
Itamar




reply via email to

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