我必须运行具有不同参数的 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)
如果第二个运行时间超过五分钟,我想停止它并继续运行下一个。因此,每个运行 jar 的最大时间为 5 分钟。如果运行时间少于 5 分钟,则没有问题;但如果运行时间超过 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
︙