Como parar um arquivo jar em execução em um script bash após 5 minutos e iniciar o próximo?

1

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 demorar mais de cinco minutos, quero pará-lo e continuar para o próximo. Portanto, o tempo máximo para cada jarro em execução é de 5 minutos. Se for preciso menos que isso, tudo bem; mas se um correr mais do que isso, o script deve continuar para o próximo.

    
por Hk148 03.09.2014 / 18:56

2 respostas

1

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 do java, encontrei este :

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);
    
por 03.09.2014 / 19:20
1

Se o seu sistema tiver o comando timeout , você poderá usá-lo, como

timeout 300s java -jar IPM.jar 0 20 3 sign.txt
    ︙
    
por 03.09.2014 / 23:01

Tags