Cronjob每25个小时?

时间:2009-09-13 07:35:09

标签: cron

如何设置每25小时运行一次的cronjob?

6 个答案:

答案 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 * * * ...