스크립트가 실행 중인지 확인하세요.

스크립트가 실행 중인지 확인하세요.

test.sh 작업은 5분마다 실행되도록 예약되어 있고 또 다른 작업 test1.sh는 오후 12시 30분 @12.30에 실행되도록 예약되어 있습니다. 두 작업 모두 실행되어 교착 상태에 빠지게 됩니다. 따라서 내가 사용하고 있는 test.sh 작업이 실행 중인지 확인해야 합니다.

ps -ef | grep test1.sh

그러나 이는 동일한 명령에 대해 한 줄을 생성하므로 항상 올바른 것 같습니다.

  # 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

grep 인쇄를 피하는 방법은 무엇입니까 test1.sh?

저는 유닉스를 처음 접했습니다.

고마워요, 앤

답변1

ps출력을 파이핑하는 대신 실행 중인지 확인하려면 를 grep사용하면 됩니다 pgrep. 이는 프로세스의 PID만 출력하므로 훨씬 더 효율적입니다. -xtest1.sh와 전체 이름이 일치하도록 플래그를 사용하고 있습니다.

pgrep -x test1.sh
876

명령 이름도 보려면 이 -l플래그를 사용할 수도 있습니다.

pgrep -xl test1.sh
876 test1.sh

부분 일치를 원할 경우 제거할 수 있습니다.-x

pgrep -l test
876 test1.sh
877 test2.sh
888 test123.sh
8745 test.bin

답변2

하나씩 따라가면 grep을 무시할 수 있습니다.

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

기타:-

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

두 번째는 아래를 내려다보며 많은 시간을 절약해줍니다.

답변3

grep이는 과 가 ps병렬로 시작되어 grep대상 문자열이 test1.sh인수로 나타나기 때문에 프로세스가 일치하기 때문에 발생합니다 ps. 이 문제를 해결하는 간단하지만 아마도 최적은 아닌 방법은 다음과 같습니다.

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

두 번째 파이프는 첫 번째 파이프의 출력을 가져와 "grep" 문자열과 일치하는 줄을 제외합니다.

관련 정보