Cron 作业延迟了约 1 秒

ant*_*hka 2 cron

我正在运行以下 cron 作业

* * * * * date "+\%Y\%m\%dT\%H\%M\%S" > /path/to/log 2>&1
Run Code Online (Sandbox Code Playgroud)

但它运行了大约一秒钟为时已晚,因为它写道例如

20210817T210001

我如何确保 cron 作业将在整分钟内运行?

Art*_*ild 12

这也涵盖在Server Fault 中

我个人喜欢这句话:“cron 可以保证你的工作不会早于指定时间开始。” 换句话说,cron 并不是真正设计为在手术上精确到秒。我自己的大部分 cron 作业也会在整整一分钟后的 01 秒甚至 02 秒开始。

为了启动 cron 作业,cron 将扫描在任何给定时间需要运行的作业。如果计划在 12:00:00 开始的作业实际上在 12:00:01 开始,这不是错误,因为 cron 初始化的时间量可能会有所不同,具体取决于多种因素。

如果您需要在确切的一秒触发“几乎”(感谢 Kevin),您应该寻找除 cron 之外的其他解决方案 - 例如systemd计时器(感谢 Andrej)、Python 脚本,甚至是为您监控时间的 C 程序。

编辑:或者(根据 Nonny Moose 的建议),您可以安排脚本提前一分钟运行,然后监控时间,以便在您希望它运行时尽可能精确地运行。

  • 然后您可以使用 crontab 在重新启动时运行该脚本 (3认同)
  • 迂腐:你*不能*有什么东西“在精确的一秒触发”。您正在抢占式多任务操作系统下运行。内核将安排您的进程在内核感觉时拥有 CPU,而不是在确切的一秒内。如果你不喜欢那样,那么你就必须使用 [sched(7)](https://man7.org/linux/man-pages/man7/sched.7.html) 来要求实时调度保证,这仍然不完美,因为内核具有非零调度开销。 (3认同)
  • 您甚至可以让 cron 启动您的程序,例如,提前一分钟,然后不断监视时间,直到它应该运行。 (2认同)