A verificação de um script está sendo executada [duplicada]

3

Eu tenho um cronograma de job.sh para executar a cada 5 minutos, e outro trabalho test1.sh programado para executar 12:30, @ 12,30 ambos os trabalhos serão executados e estão causando um impasse. Então, preciso verificar o trabalho que o test.sh está executando para o que estou usando:

ps -ef | grep test1.sh

mas isso parece ser verdade sempre, pois produz uma linha para o mesmo comando.

  # ps -ef | grep test1.sh
team 24896   607  0 11:55 pts/11   00:00:00 test1.sh
team 24925   523  0 11:55 pts/4    00:00:00 grep test1.sh

como evitar a impressão grep test1.sh ?

Sou muito novo no unix.

Obrigado Ann

    
por Ann 14.11.2016 / 17:59

3 respostas

2

Você pode simplesmente ignorar o grep um por um dos seguintes: -

ps -ef | grep test1.sh | grep -v grep

else: -

ps -ef | grep "[t]est1.sh"

O segundo visual descende e economiza muito tempo.

    
por 14.11.2016 / 18:07
4

Se você está apenas olhando para ver se ele está sendo executado em vez do canal ps output para grep , você pode usar pgrep . Isso só produzirá o PID do processo e será muito mais eficiente. Eu estou usando o -x sinalizador para que ele faça uma correspondência de nome exato para test1.sh

pgrep -x test1.sh
876

Se você quiser ver o nome do comando, também pode usar o sinalizador -l .

pgrep -xl test1.sh
876 test1.sh

E se você quiser fazer uma correspondência parcial, basta remover o -x

pgrep -l test
876 test1.sh
877 test2.sh
888 test123.sh
8745 test.bin
    
por 14.11.2016 / 20:02
1

Isso acontece porque grep e ps são lançados em paralelo, portanto, o processo grep é correspondido porque a sequência de caracteres de destino test1.sh aparece como seu argumento em ps . Uma forma simples, mas provavelmente sub-ótima, de contornar isso seria:

ps -ef | grep "test1.sh" | grep -v "grep"

O segundo pipe pega a saída do primeiro e exclui linhas contendo uma correspondência para a string "grep".

    
por 14.11.2016 / 18:11