Como posso fazer um script bash que determina se um programa já está em execução

3

Existe um programa python que estou fazendo, e estou planejando que ele seja lançado por meio de um script bash. No entanto, o programa age mal quando o computador tenta iniciá-lo duas vezes. Já que eu realmente preciso apenas que este programa seja iniciado uma vez, como posso saber se o programa já está sendo executado ou não?

    
por user3346931 15.07.2015 / 16:51

4 respostas

3

Se o seu script bash é chamado my_script.sh , adicione-o no topo:

#!/bin/bash
for pid in $(pidof -x my_script.sh); do
    if [ $pid != $$ ]; then
        exit 1
    fi 
done
python python_app.py

Ele listará todos os PIDs relacionados a my_script.sh e verificará se eles são os mesmos do processo que estamos executando atualmente. Se não, saia do script.

    
por 15.07.2015 / 16:59
9

Uma maneira seria registrar o PID do processo python em, digamos, /var/run , em seguida, o script bash poderia ver se o arquivo com esse PID existe e se ele faz se esse PID ainda estiver em execução.

Outra possibilidade seria usar pgrep para ver se o processo está sendo executado se houver uma parte única e suficiente do nome (o python provavelmente é muito comum de usar, mas o próprio script py provavelmente funcionaria). Por exemplo:

if pgrep -f "python yourScript.py" &>/dev/null; then
    echo "it is already running"
    exit
else
    python yourScript.py
fi

assumindo que yourScript.py irá se daemonizar ou algo assim

    
por 15.07.2015 / 16:59
0

tente usar ps -ef

  #!/bin/bash
  export me='basename $0'
  if [[ -n $(ps -ef | grep $1 | grep -v grep | grep -v $me) ]]; then      
     echo "the program is running";
  else     
    echo "not running"; 
  fi
    
por 15.07.2015 / 17:04
0

Um arquivo de bloqueio pode ser uma maneira mais elegante de fazer isso. Quando o programa é iniciado, ele verifica se há um bloqueio e, se houver, ele para. Se não há um, ele cria um e continua correndo.

Também seria uma maneira útil de você informar quanto tempo o programa está sendo executado até o momento no arquivo de bloqueio.

Eu estava pesquisando isso no outro dia e encontrei este post: A melhor maneira de garantir que apenas 1 cópia do script bash esteja em execução?

    
por 16.07.2015 / 00:03

Tags