프로세스 (라고 가정 some_process
)가 서버에서 실행되고 있는지 확인하려고 합니다. 그렇다면 echo 1, 그렇지 않으면 echo 0.
이것은 내가 사용하는 명령이지만 부분적으로 만 작동합니다 (아래 자세한 정보 참조). 스크립트를 한 줄에 작성해야합니다.
ps aux | grep some_proces[s] > /tmp/test.txt && if [ $? -eq 0 ]; then echo 1; else echo 0; fi
참고 :[s]
에이 some_proces[s]
방지하는 것 grep
자체를 반환에서.
some_process
실행 중이 면 "1"
반향이 발생합니다. 그러나 some_process
실행 중이 아니면 아무 것도 에코되지 않습니다.
답변
명시 적으로 확인할 필요가 없습니다 $?
. 그냥 해:
ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0
이것은 에코 실패에 의존하므로 확실히 보장되지는 않습니다. 이것을 작성하는보다 안정적인 방법은 다음과 같습니다.
if ps aux | grep some_proces[s] > /tmp/test.txt; then echo 1; else echo 0; fi
답변
&&
“그리고 성공하면”을 의미한다; if
명령문을 오른쪽 에 배치 하면 grep
리턴시 에만 실행되도록해야 합니다 0
. 수정하려면 ;
대신 사용하십시오.
ps aux | grep some_proces[s] > /tmp/test.txt ; if [ $? -eq 0 ]; then echo 1; else echo 0; fi
(또는 그냥 줄 바꿈을 사용하십시오).
답변
사용 grep -vc
무시 grep
의 ps
출력과 동시에 라인을 계산합니다.
if [[ $(ps aux | grep process | grep -vc grep) > 0 ]] ; then echo 1; else echo 0 ; fi
답변
다음 &&
과 ||
같이 and 연산자를 최대한 활용할 수 있습니다 .
ps aux | grep some_proces[s] > /tmp/test.txt && echo 1 || echo 0
grep 자체를 제외하기 위해 다음과 같은 작업을 수행 할 수도 있습니다.
ps aux | grep some_proces | grep -vw grep > /tmp/test.txt && echo 1 || echo 0
