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: Tiago Peczenyj
Subject: Re: [shell-script] Não executar processo se o mesmo já estiver em execução
Date: Mon, 24 Mar 2014 14:12:04 -0300

mas ai vc pode avisar "existe o arquivo /var/lock/foobar.lock"

se o processo não estiver rodando vc pode simplesmente apagar o arquivo.

perceba que se vc renomear o script pode ter uma surpresa.


2014-03-24 14:09 GMT-03:00 Christian Lyra <address@hidden>:
 

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




--
Tiago B. Peczenyj
Linux User #405772

http://about.me/peczenyj

reply via email to

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