Ich muss eine JAR-Datei mit unterschiedlichen Parametern wie folgt ausführen:
#!/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)
Wenn beispielsweise das zweite Skript länger als fünf Minuten gedauert hat, möchte ich es stoppen und mit dem nächsten fortfahren. Die maximale Zeit für jedes laufende Jar beträgt also 5 Minuten. Wenn es weniger dauert, ist das in Ordnung; wenn eines jedoch länger dauert, muss das Skript mit dem nächsten fortfahren.
Antwort1
Dies sollte in Bash 4 oder höher funktionieren:
#!/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 )
Für frühere Versionen:
#!/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'
Nach einiger Suche nach einer reinen Java-Version fand ichDas:
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);
Antwort2
Wenn Ihr System über den timeout
Befehl verfügt, sollten Sie ihn verwenden können, da
timeout 300s java -jar IPM.jar 0 20 3 sign.txt
︙