我需要创建一个 cron 作业,在 unix 服务器上每 40 分钟运行一次 java 程序。考虑到:1)它应该从周一到周五的 8h30 到 12h30 和 14h 到 18h 运行2)考虑假期。
我读了很多关于它的内容,发现这个 */30 8..13,14..19 * * 1..5 是最接近的解决方案。我想知道 crontab 是否可以做我想做的事,如果不能,是否可以使用 java 或任何代码来验证假期日期。谢谢你的帮助
答案1
CRON 并不是那么聪明,你要么需要制定大量类似的规则,要么编写一些更定制化的东西来为你完成这件事(但要小心,你不会想编写一个以 root 身份运行用户提供的东西的脚本而不特别小心。划掉它,你不会想编写一个完全这样做的脚本)
答案2
就像詹姆斯所说的,cron 其实并不是那么智能:它擅长“在这些时间做这些事情,一遍又一遍,直到我告诉你停止”,但它不会遵循浮动假期,也不会对“时髦”的时间感到兴奋every 40 minutes
(它需要一堆 crontab 条目来做这样的事情 - 你几乎需要为每次运行创建一个)。
最好使用 cron(即上面的规则,即在第 1 部分的限制内“在 HH:30 标记上每半小时运行一次”),然后让您的脚本自行检查异常(假期)并决定是否应该/不应该继续。
答案3
这可能有点过分,但您可以使用 Hudson 来运行作业。您本身无法立即使用计时规则运行作业,但您可以通过多种方法远程触发作业。因此,如果您可以编写脚本来更改网页内容或创建新文件或对 Hudson 进行 REST 调用或执行 git checkin,只要您希望作业运行,那么您就很幸运了。您还可以获得比单独使用 cron 更好的日志记录,并且每当作业失败时都很容易收到警报(通过电子邮件、jabber、irc、nabaztag...)
从另一个角度来看。您真的需要它在指定的规则内运行吗?如果您每半小时运行一次会发生什么?如果您在不想要的时间运行它会发生什么?