특정 출력 시 프로세스 종료

특정 출력 시 프로세스 종료

해당 프로세스의 특정 출력에 따라 프로세스를 종료하려면 어떻게 해야 합니까? 예를 들어, 를 사용하여 Java 프로그램을 실행하는 경우 java -jar xyz.jarstdout에 "Started server on port 8000"이라는 줄이 나타나면 프로세스를 종료하고 싶습니다.

답변1

grep -m1이는 귀하에게 적합하지 않다는 점을 고려하여 다음 스크립트를 사용하여 수행할 수 있습니다 .

#!/bin/bash

java -jar xyz.jar &> "/tmp/yourscriptlog.txt" &
processnumber=$!
tail -F "/tmp/yourscriptlog.txt" | awk  '/Started server on port 8000/ { system("kill '$processnumber'") }'

기본적으로 이 스크립트는 stdout명령을 사용하여 Java 코드를 파일로 리디렉션합니다 &> "/tmp/yourscriptlog.txt". 첫 번째 줄의 마지막은 &코드가 격리된 프로세스로 실행되도록 하며 다음 줄에는 이 프로세스의 번호가 있습니다 $!. 프로세스 번호와 로그 파일이 있으면 tail원하는 라인이 인쇄될 때 최종적으로 프로세스를 종료할 수 있습니다.

답변2

java -jar xyz.jar | grep -m1 "Started server on port 8000"

답변3

스크립트가 단순히 배경으로 푸시되지 않는 경우와 같이 더 복잡한 경우에 대해 @Rafael의 답변을 조정했습니다.

첫 번째 세션을 열고 tmux명령을 입력한 다음( tee실시간 출력을 보려면 리디렉션 대신 사용) Ctrl-B D를 사용하여 분리합니다.

java -jar xyz.jar &> '/var/log/myscript.log'

다른 tmux 세션에서 종료를 처리합니다.

tail -F '/var/log/myscript.log' | awk '/Started server on port 8000/ { system("tmux kill-session -t 0") }'

이미 실행 중인 다른 tmux 세션이 있는 경우 명명된 세션을 사용하세요.

관련 정보