2017-10-16 62 views
0

我有一个每小时执行一次.sh脚本的crontab作业。这个脚本导航(cd ...)到一个目录,然后启动一个java程序(java -jar)。超时的Crontab作业

如果我想确保java程序运行时间不超过30分钟,我应该在哪里设置超时时间?它应该在crontab还是在.sh脚本中?

+0

如果它只运行Java,为什么不在Java本身中执行超时?这将有助于您在另一个环境或甚至操作系统中运行java。 –

回答

1

你把超时时间与情况相关。我可能会使用的一个指标是“什么会最大程度地减少下一个人的认知和维护负担(谁可能是我多年的时间!”)?“有时,情境的背景决定使用cronjob程序的参数,其他时候最好使用timeout。其他时候,您可能会使用...

上下文事项。 您的的情况最有意义吗?

+0

这是一个很好的观点。让我提供更具体的信息。基本上,当作业运行时,它会启动一些进程(1用于crontab调度,1用于.sh脚本,1用于JVM)。我希望所有进程在超时后结束。从维护的角度来看,最简单的方法是直接在crontab中设置超时。由于我不确定在Ubuntu中如何处理进程层次结构,所以我担心JVM进程会继续运行,如果我这样做了,只有.sh脚本会被杀死。 –

+0

寻求最简单的解决方案,只在需要时升级。因此,我会尝试'超时',看看它是如何工作的。如果不是,我可能会考虑简化一些细节。例如,你的脚本是做什么的?如果它只是设置环境然后调用JVM,那么可以考虑'exec',这样shellscript的PID就成为JVM的PID。在那个时候,'超时'应该做你想要的。如果它比这更复杂,我可能会在你的shell脚本中设置你的超时时间,并杀死所有必要的进程。总之,“尝试一下,看看”。 – hunteke

+0

我想我会用把超时中的cronjob这样走: 超时600/bin/sh的myscript.sh 然后在剧本,我会打电话给我的Java应用程序这样: EXEC须藤Java的罐子myJarFile.jar中。这会起作用吗? –