Как остановить запуск jar-файла в скрипте bash через 5 минут и запустить следующий?

Я должен запустить файл 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 минут. Если это занимает меньше, это нормально; но если один работает дольше, сценарий должен продолжать следующий.

26
задан G-Man
06.12.2022 13:37 Количество просмотров материала 3549
Распечатать страницу

2 ответа

Это должно работать в 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);
1
отвечен NuTTyX 2022-12-07 21:25

Если ваша система имеет timeout команда, вы должны быть в состоянии использовать его, как

timeout 300s java -jar IPM.jar 0 20 3 sign.txt
    ︙
1
отвечен G-Man 2022-12-07 23:42

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх