verificar processos antes de executar

0

Oi eu estou tentando fazer um script que verifica 3 arquivos antes de executar. Se eles estão funcionando ou não. O que há de errado com meu código?

#!/bin/bash
if [[ ! $(pgrep -f a1.php) ]];  //check if any pid number returned if yes close and exit this shell script    
    exit 1
if [[ ! $(pgrep -f a2.php) ]];  //check if any pid number returned if yes close and exit this shell script 
    exit 1
if [[ ! $(pgrep -f a3.txt) ]];  //check if any pid number returned if yes close and exit this shell script  
    exit 1
else
    php -f a.php; php -f b.php; sh -e a3.txt   //3 files is not running now we run these process one by one
fi
    
por danone 04.10.2017 / 12:56

1 resposta

1
  1. Você não está usando o formato correto para if no bash, em especial, perdeu then e fi .

  2. $() subshell possivelmente não está fazendo o que você pensa. Ele retorna o stdout do comando dentro, não o código de saída (que é normalmente o que você testa). O $(pgrep -c -f a1.php) -gt 0 usando o sinal -c para retornar o número de processos correspondentes ou pgrep -f a1.php > /dev/null usando o código de saída seria melhor.

    [[ ! $(pgrep -f a1.php) ]] pode funcionar neste caso, mas [[ $(pgrep -f a1.php) ]] falharia se mais de um processo correspondesse, por isso é frágil.

Tente,

if [[ $(pgrep -c -f a1.php) -gt 0 ]]; then
    exit 1
fi
if [[ $(pgrep -c -f a2.php) -gt 0 ]]; then
    exit 1
fi
if [[ $(pgrep -c -f a3.txt) -gt 0 ]]; then
    exit 1
fi

php -f a.php; php -f b.php; sh -e a3.txt

OU ALTERNATIVAMENTE

pgrep -f a1.php > /dev/null && exit 1
pgrep -f a2.php > /dev/null && exit 1
pgrep -f a3.php > /dev/null && exit 1

php -f a.php; php -f b.php; sh -e a3.txt

Consulte o link para obter mais informações sobre a declaração if.

    
por 04.10.2017 / 13:09