【问题标题】:Crontab job with timeout超时的 crontab 作业
【发布时间】:2017-10-16 00:28:37
【问题描述】:

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

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

【问题讨论】:

  • 如果它只运行Java,为什么不在Java本身做超时呢?如果您在另一个上下文甚至 O/S 中运行 java,这将很有帮助。

标签: bash cron timeout


【解决方案1】:

超时设置取决于具体情况。我可能使用的一个指标是“什么最能减轻下一个人(几年后可能是我!)的认知和维护负担?”有时,情况的上下文要求使用 cronjob 程序的参数,其他时候最好使用timeout。其他时候,您可能会使用 ...

上下文很重要。在您的情况下什么最有意义?

【讨论】:

  • 这很好。让我提供有关上下文的更具体信息。基本上,当作业运行时,它会启动一些进程(1 个用于 crontab 计划,1 个用于 .sh 脚本,1 个用于 JVM)。我希望所有进程在超时后结束。从维护的角度来看,对我来说最简单的方法是直接在 crontab 中设置超时。由于我不确定在 Ubuntu 中如何处理进程层次结构,我担心 JVM 进程会继续运行,如果我这样做了,只会杀死 .sh 脚本。
  • 寻求最简单的解决方案,只在需要时升级。因此,我会尝试timeout 看看它是如何工作的。如果没有,我可能会考虑精简一些细节。例如,你的脚本是做什么的?如果它只是设置环境然后调用JVM,您可以考虑exec,以便shellscript 的PID 成为JVM 的PID。那时,timeout 应该做你想做的事。如果它比这更复杂,我可能会在你的 shellscript 中设置你的超时,并杀死所有必要的进程。简而言之,“试试看,看看”。
  • 我想我会在 cronjob 中这样设置超时: timeout 600 /bin/sh myscript.sh 然后在脚本中,我会这样调用我的 java 应用程序:exec sudo java -jar myjarfile.jar。这行得通吗?
  • 应该,虽然我质疑你为什么需要sudo。如果此脚本以 root 身份运行,为什么不使用 root 的 crontab?与sudo相比,混合中可能还有“另一个”过程。
  • 好点,我已经使用 sudo crontab -e 安排了脚本,因此使用 sudo 运行 java 应用程序是多余的。我会删除它,再次感谢您的提示!
猜你喜欢
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2020-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多