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

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

Re: [shell-script] Não executar processo se o mesmo já estiver em execuç


From: Julio C. Neves
Subject: Re: [shell-script] Não executar processo se o mesmo já estiver em execução
Date: Mon, 24 Mar 2014 14:20:00 -0300

Mas Cristian,
um prg bem escrito, que use arquivos temporários (como /xx/$$), ou bancos de dados não comitados, ou processos filhos deve ter uma linha do tipo
trap "kill /meus/filhos; commit /banco/de/dados; rm /xx/$$; exit $?" 0 2 3 15

E nesse caso, isso que vc descreveu (se eu entendi bem) não ocorreria.

Abcs,
Julio
@juliobash

Próximos cursos de Shell

Cidade

Local

Período

Rio de Janeiro

EDX

07-11/04

Dou treinamento de shell em qualquer cidade.
Para detalhes, entre em contato por email ou
echo 436233889341364416673541503686485725801923229706P | dc 



Em 24 de março de 2014 14:09, Christian Lyra <address@hidden> escreveu:
 

Caros,

Eu incluiria os parametros que foram passados para o processo. Tanto no grep quanto no pgrep (com "-f"). Afinal um "faz_backup.sh minhapasta" é bem diferente de um "faz_backup.sh outrapasta". A solução com arquivos temporários pode te dar problemas se o processo morrer sem ter apagado o arquivo de lock que ele criou.


2014-03-24 14:00 GMT-03:00 Leslie Watter <address@hidden>:
 

Oi,
Outra alternativa é usar o comando pidof com a opção -x que te retorna um PID de processo caso o projeto esteja em execução.

De qualquer forma, é fácil de pegar se o programa está em execução com o pidof + um teste if.



---------------------------------------------------------------------------
[6197:3927 - 3:2171] 01:56:48 [leslie@ecelepar16853:o +2] /tmp 
$ ps -ef | grep a.sh 
leslie   14434  6197  0 13:56 pts/9    00:00:00 /bin/bash ./a.sh
leslie   14443  6197  0 13:56 pts/9    00:00:00 grep --color=auto a.sh

[6197:3927 - 3:2172] 01:56:50 [leslie@ecelepar16853:o +2] /tmp 
$ pidof a.sh 

[6197:3927 - 3:2173] 01:56:57 [leslie@ecelepar16853:o +2] /tmp 
$ pidof -x a.sh 
14434

[6197:3927 - 3:2174] 01:57:00 [leslie@ecelepar16853:o +2] /tmp 
$ cat a.sh 
#!/bin/bash
sleep 1m;


[6197:3927 - 2:2176] 01:59:13 [leslie@ecelepar16853:o +2] /tmp 
$ if [ `pidof -x a.sh` ] ; then echo "em Execução"; fi
em Execução
--------------------------------------------------------------------------------


[]s

LEslie




2014-03-24 13:51 GMT-03:00 Julio C. Neves <address@hidden>:

 

Acabei de escrever esse código para a 2ª edição do livro "Bombando o Shell (Caixa de ferramentas gráficas do Shell)":

pgrep ^$1$ > /dev/null &&
    yad --button "Matar:0" --button "Ignorar:1" \
    --text "Já existe outra instância de $1 sendo \
executada,\nDeseja matá-la?" && killall $1
eval $1

Ele é feito para ser usado com o yad, mas se vc quiser matar direto sem perguntar nada, basta fazer:
pgrep ^$1$ > /dev/null && killall $1 # Mata todas as instâncias
eval $1     # dispara um novo processo

Abcs,
Julio
@juliobash

Próximos cursos de Shell

Cidade

Local

Período

Rio de Janeiro

EDX

07-11/04

Dou treinamento de shell em qualquer cidade.
Para detalhes, entre em contato por email ou
echo 436233889341364416673541503686485725801923229706P | dc 



Em 24 de março de 2014 13:39, <address@hidden> escreveu:

 

Olá pessoal!
Como vão?
Estou implementando algumas rotinas num novo server e uma das coisas que pretendo fazer é que determinado script não seja executado se os mesmo já estiver em execução. Só não sei se há algum comando que ja tenha sido criado para essa finalidade. Se não houver, acho que vou resolver por meio da criação de arquivos temporários, o que ao meu ver não é a melhor solução ou utilizando o comando ps.
Talvez alguém aqui já tenha enfrentado esta questão e seria legal saber como foi resolvido.
Um grande abraço!





--
Leslie H. Watter




--
Christian Lyra
PoP-PR/RNP
(41) 3361-3343



reply via email to

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