我该如何设置一个每 25 小时运行一次的 cron 作业?
我该如何设置一个每 25 小时运行一次的 cron 作业?
仅仅猜测,但是你不
我能想到的最好的技巧是:编写一个脚本来跟踪上一次运行的时间,并在超过25小时后有条件地运行它。
将该驱动脚本安排在cron中每小时运行。
当您启动当前任务时,可以更容易地发出指定下一个作业的时间和日期的 at
命令,但是您可以通过更新进程的 cronjob 条目来模拟它,在当前运行开始时进行(不是在结束时,因为那样您需要考虑运行作业所需的时间)。
设置一个每小时运行的任务,并在您的脚本中检查是否已经过去了25个小时,使用以下代码片段:
if [ $((((`date +%s` - (`date +%s` % 3600))/3600) % 25)) -eq 0 ] ; then
your script
fi
如果你计算自 Epoch 以来的小时数(分钟数、天数或周数),并在脚本顶部添加一个条件,将脚本设置为在你的 crontab 中每小时运行,那么你就可以实现任何频率。
#!/bin/bash
hoursSinceEpoch=$(($(date +'%s / 60 / 60')))
# every 25 hours
if [[ $(($hoursSinceEpoch % 25)) -ne 0 ]]; then
exit 0
fi
date(1)
命令返回当前日期,我们将其格式化为自纪元以来的秒数(%s
),然后进行基本数学运算:
# .---------------------- bash command substitution
# |.--------------------- bash arithmetic expansion
# || .------------------- bash command substitution
# || | .---------------- date command
# || | | .------------ FORMAT argument
# || | | | .----- formula to calculate minutes/hours/days/etc is included into the format string passed to date command
# || | | | |
# ** * * * *
$(($(date +'%s / 60')))
# * * ---------------
# | | |
# | | ·----------- date should result in something like "1438390397 / 60"
# | ·-------------------- it gets evaluated as an expression. (the maths)
# ·---------------------- and we can store it
你可以将这种方法用于分钟、小时、天或月的定时任务:
#!/bin/bash
# We can get the
minutes=$(($(date +'%s / 60')))
hours=$(($(date +'%s / 60 / 60')))
days=$(($(date +'%s / 60 / 60 / 24')))
weeks=$(($(date +'%s / 60 / 60 / 24 / 7')))
# or even
moons=$(($(date +'%s / 60 / 60 / 24 / 656')))
# passed since Epoch and define a frequency
# let's say, every 13 days
if [[ $(($days % 13)) -ne 0 ]]; then
exit 0
fi
# and your actual script starts here
我认为你应该尝试这个
0 */25 * * * ...