해당 프로세스의 특정 출력에 따라 프로세스를 종료하려면 어떻게 해야 합니까? 예를 들어, 를 사용하여 Java 프로그램을 실행하는 경우 java -jar xyz.jar
stdout에 "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 세션이 있는 경우 명명된 세션을 사용하세요.