我想每隔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表达式来定义间隔?
答案 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 ...