如何设置每25小时运行一次的cronjob?
答案 0 :(得分:16)
只是一个猜测,但你不
最好的解决方法:编写一个脚本来跟踪它上次运行的时间,并在超过25小时之前有条件地运行它。
Cron那个驱动程序脚本每小时运行一次。
答案 1 :(得分:7)
当您启动当前作业时,发出at
命令指定下一个作业的时间和日期会更容易,但您可以通过在开始时更新进程的cronjob条目来使用cronjob来模拟它当前的运行(不是在结束时,你必须考虑到运行工作的时间)。
答案 2 :(得分:2)
设置每小时的工作并检查您的脚本,如果使用此片段已过去25小时:
if [ $((((`date +%s` - (`date +%s` % 3600))/3600) % 25)) -eq 0 ] ; then
your script
fi
答案 3 :(得分:1)
如果计算自Epoch以来的小时数(分钟,天或周),将条件添加到脚本顶部,并将脚本设置为在crontab上每小时运行一次,则可以达到任何频率:
#!/bin/bash
hoursSinceEpoch=$(($(date +'%s / 60 / 60')))
# every 25 hours
if [[ $(($hoursSinceEpoch % 25)) -ne 0 ]]; then
exit 0
fi
date(1)
返回当前日期,我们将其格式化为自Epoch(%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
您可以将这种方法用于每小时,每小时,每天或每月的cron工作:
#!/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
答案 4 :(得分:0)
您可以使用'sleep'或'watch'命令让脚本在循环中运行。只需确保脚本已执行。
答案 5 :(得分:-1)
我认为你应该试试这个
0 */25 * * * ...