5분 후에 bash 스크립트에서 실행 중인 jar 파일을 중지하고 다음 파일을 시작하는 방법은 무엇입니까?

5분 후에 bash 스크립트에서 실행 중인 jar 파일을 중지하고 다음 파일을 시작하는 방법은 무엇입니까?

다음과 같이 다른 매개변수를 사용하여 jar 파일을 실행해야 합니다.

#!/bin/bash
cd /Users/hawkarhama/Desktop/RUN 
echo $(java -jar IPM.jar 0 20 3 sign.txt)
echo $(java -jar IPM.jar 1 20 3 sign.txt)
echo $(java -jar IPM.jar 2 20 3 sign.txt)

예를 들어 두 번째 작업이 5분 이상 걸렸다면 중지하고 다음 작업을 계속하고 싶습니다. 따라서 실행 중인 각 jar의 최대 시간은 5분입니다. 그보다 적게 걸리면 괜찮습니다. 그러나 그보다 오래 실행되면 스크립트는 다음 스크립트로 계속 진행되어야 합니다.

답변1

이는 bash 4 이상에서 작동합니다.

#!/bin/bash
cd /Users/hawkarhama/Desktop/RUN 
( cmdpid=$BASHPID; (sleep 300; kill $cmdpid ) & exec java -jar IPM.jar 0 20 3 sign.txt )
( cmdpid=$BASHPID; (sleep 300; kill $cmdpid ) & exec java -jar IPM.jar 1 20 3 sign.txt )
( cmdpid=$BASHPID; (sleep 300; kill $cmdpid ) & exec java -jar IPM.jar 2 20 3 sign.txt )

이전 버전의 경우:

#!/bin/bash
cd /Users/hawkarhama/Desktop/RUN 
bash -c '(sleep 300; kill $$) & exec java -jar IPM.jar 0 20 3 sign.txt'
bash -c '(sleep 300; kill $$) & exec java -jar IPM.jar 1 20 3 sign.txt'
bash -c '(sleep 300; kill $$) & exec java -jar IPM.jar 2 20 3 sign.txt'

순수 Java 버전을 조금 검색한 후 찾았습니다.이것:

ScheduledExecutorService executor = Executors.newScheduledThreadPool(2); 
final Future handler = executor.submit(new Callable(){ 
     DoStuffHere();
});
executor.schedule(new Runnable(){
     public void run(){
         handler.cancel();
     }      
}, 5*60*1000, TimeUnit.MILLISECONDS);

답변2

시스템에 해당 timeout명령이 있으면 다음과 같이 사용할 수 있습니다.

timeout 300s java -jar IPM.jar 0 20 3 sign.txt

관련 정보