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.
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
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
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".
Tags ps grep shell-script