是否有cron表达式每隔九分钟运行一次脚本?

时间:2015-03-25 13:29:40

标签: cron sh

我想每隔9分钟和每70分钟运行一次bash命令。

man -S 5 crontab说:

  

星号后也允许步骤,所以如果你想说每两个小时",只需使用" * / 2"。

我运行了命令

echo "Cron-job runs. ($(date))" >> crontest.log

使用cron表达式

*/9 * * * *

给了我

Cron-job runs. (We 25. Mar 13:27:01 CET 2015)
Cron-job runs. (We 25. Mar 13:36:01 CET 2015)
Cron-job runs. (We 25. Mar 13:45:01 CET 2015)
Cron-job runs. (We 25. Mar 13:54:01 CET 2015)
Cron-job runs. (We 25. Mar 14:00:01 CET 2015)
Cron-job runs. (We 25. Mar 14:09:01 CET 2015)
Cron-job runs. (We 25. Mar 14:18:01 CET 2015)

似乎*/9表示"每分钟可以除以九而没有余数" (这包括零!)而不是"每隔九分钟"。

是否有cron表达式来定义间隔?

2 个答案:

答案 0 :(得分:0)

不,这个特定用例没有设施。您可以创建一个列出所有组合的复杂crontab;

0-54/9 0-21/3 * * * crontest
3-57/9 1-22/3 * * * crontest
6-51/9 2-23/3 * * * crontest

(这个复杂的语法是一个扩展,但由于你问的是*/9这是一个类似的扩展,你也应该能够使用上面的内容。请参阅本答案的早期版本 - 手语法,但我在原始答案中错误地将其识别为扩展。)

每70分钟执行一次,类似的表会更加复杂,因为70不能被1440(24 * 60)整除。你最终会有一个多天的周期,因此表格变得如此复杂,以至于需要替代解决方案。

......其中一个是使用自我调度at工作:

#!/bin/sh
echo "$0" "$@" | at now + 70 minutes
:
# the rest of your crontest script here

你需要第一次手动启动这个,但之后会继续安排新的工作。 (如果您的服务器长时间停机,您可能需要重新启动它;但是该工作应该能够在偶尔快速重启后继续运行。)

答案 1 :(得分:0)

或者您可以每分钟运行一次脚本,脚本可以检查它是否是正确的运行时间。

未测试

#!/bin/bash
minute_of_the_epoch=$(( $(date +%s) / 60 ))
(( minute_of_the_epoch % 9 != 0 )) && exit

# rest of script ...