Eu tenho que executar um arquivo jar com parâmetros diferentes como este:
#!/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)
Se, digamos, o segundo demorou mais de cinco minutos, quero interrompê-lo e passar para o próximo. Portanto, o tempo máximo para cada frasco em execução é de 5 minutos. Se demorar menos que isso, tudo bem; mas se alguém demorar mais que isso, o script deverá continuar para o próximo.
Responder1
Isso deve funcionar no bash 4 ou posterior:
#!/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 )
Para versões anteriores:
#!/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'
Depois de procurar um pouco por uma versão java pura, encontreiesse:
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);
Responder2
Se o seu sistema tiver o timeout
comando, você poderá usá-lo, como
timeout 300s java -jar IPM.jar 0 20 3 sign.txt
︙