다음과 같이 다른 매개변수를 사용하여 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
︙