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

是否有cron表达式每九分钟运行一次脚本?,cron,sh,Cron,Sh,我希望每9分钟和每70分钟运行一次bash命令 man-s5crontab说: 在星号后也允许执行步骤,因此如果您想说“每两小时”,只需使用“*/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

我希望每9分钟和每70分钟运行一次bash命令

man-s5crontab
说:

在星号后也允许执行步骤,因此如果您想说“每两小时”,只需使用“*/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表达式来定义间隔?

否,没有用于此特定用例的工具。您可以创建一个复杂的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)平均整除。结果是在多天内有一个周期,因此表格变得如此复杂,以至于需要其他解决方案

。。。其中之一是在作业中使用自调度

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

您需要在第一次手动启动此作业,但此后它将继续安排新作业。(如果您的服务器长时间停机,您可能需要重新启动它;但该作业在偶尔快速重新启动后仍能正常运行。)

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

未经测试

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

# rest of script ...