向cron添加一个作业,并每1h和x分钟执行一次

向cron添加一个作业,并每1h和x分钟执行一次,cron,Cron,我希望每1小时x分钟执行一次cronjob 我尝试添加到crontab: */53 */1 * * * /myscrop.sh 但是,scrip每53分钟执行一次,而不是每1小时执行一次,53分钟执行一次,Cron不为间隔添加小时和分钟。运行时间为1:53、2:53、3:53等 您必须创建单独的计划。在53分钟的时间间隔内,布景如下: 0 0 * * * /myscrop.sh 53 0 * * * /myscrop.sh 46 1 * * * /myscrop.sh 39 2 * * * /

我希望每1小时x分钟执行一次cronjob

我尝试添加到crontab:

*/53 */1 * * * /myscrop.sh

但是,scrip每53分钟执行一次,而不是每1小时执行一次,53分钟执行一次,Cron不为间隔添加小时和分钟。运行时间为1:53、2:53、3:53等

您必须创建单独的计划。在53分钟的时间间隔内,布景如下:

0 0 * * * /myscrop.sh
53 0 * * * /myscrop.sh
46 1 * * * /myscrop.sh
39 2 * * * /myscrop.sh
32 3 * * * /myscrop.sh
25 4 * * * /myscrop.sh
18 5 * * * /myscrop.sh
11 6 * * * /myscrop.sh
4 7 * * * /myscrop.sh
57 7 * * * /myscrop.sh
50 8 * * * /myscrop.sh
43 9 * * * /myscrop.sh
36 10 * * * /myscrop.sh
29 11 * * * /myscrop.sh
22 12 * * * /myscrop.sh
15 13 * * * /myscrop.sh
8 14 * * * /myscrop.sh
1 15 * * * /myscrop.sh
54 15 * * * /myscrop.sh
47 16 * * * /myscrop.sh
40 17 * * * /myscrop.sh
33 18 * * * /myscrop.sh
26 19 * * * /myscrop.sh
19 20 * * * /myscrop.sh
12 21 * * * /myscrop.sh
5 22 * * * /myscrop.sh
58 22 * * * /myscrop.sh
51 23 * * * /myscrop.sh
请注意,时间间隔总是在一天开始时重新开始。

对于“常规”crontab条目,如果没有大量条目,则很难做到这一点

由于您希望您的作业每1小时进行一次:53米(113米),因此您可以每分钟运行一次,但要使用合适的步长值,例如:

*/113 * * * command-to-run
尽管我从未用这样的大跳过值测试过

如果这行得通,那可能是最简单的解决办法

如果您在一个不起作用的环境中运行,您可以恢复到每分钟实际运行脚本的技巧,但让脚本决定它是否执行任务的实际“有效负载”

为此,请使用状态文件记录有效负载上次运行的时间。尽管脚本本身经常运行,但负载仅在自上次运行以来的足够时间内运行

例如,以下脚本仅每七秒钟运行一次有效负载(最终的
echo
),而不管调用该脚本的频率如何:

#!/bin/bash

# Configuration items.

stateFile=/tmp/lastPayload # File holding time of last payload run.
minGap=7                   # How often payload should run (seconds).

# Get last payload time (checks for non-valid data).

((lastTime = 0))
[[ -f ${stateFile} ]] && lastTime="$(cat ${stateFile})"
[[ "${lastTime}" =~ [1-9][0-9]* ]] || ((lastTime = 0))

# Exit if not enough time since last payload run.

thisTime=$(date +%s)
((timeGap = thisTime - lastTime))
[[ ${timeGap} -lt ${minGap} ]] && exit

# Update last payload run time and execute payload.

echo ${thisTime} >${stateFile}
echo "[${lastTime}] [${thisTime}] [${timeGap}]"
如果该脚本被称为
test\u periodic.sh
,则可以使用以下方法对其进行测试:

while true ; do ./test_periodic.sh ; sleep 1 ; done
这将每秒运行一次,但您会注意到负载仅每七秒执行一次(第一次除外),正如预期的那样:

[0] [1504041523] [1504041523]
[1504041523] [1504041530] [7]
[1504041530] [1504041537] [7]
[1504041537] [1504041544] [7]
对于1h:53m,将
minGap
设置为6780(113分钟,以秒为单位),并让
cron
每分钟运行一次脚本