将作业添加到cron并每1小时和x分钟执行一次

时间:2017-09-01 03:46:22

标签: cron

我想每1小时和x分钟执行一次cronjob

我尝试添加到crontab:

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

但是每隔53分钟执行一次,而不是1小时53分钟

2 个答案:

答案 0 :(得分:1)

"常规" crontab条目,如果没有大量条目,这很难做到。

由于你希望你的工作每1小时发生一次:53米(113米),你可能只能运行每一分钟但具有合适的步长值,例如:

*/113 * * * command-to-run

虽然我从来没有用这样的大跳过值来测试它。

如果可以,它可能是最简单的解决方案。

如果您在无法工作的环境中运行,您可以恢复到每分钟实际运行脚本的技巧,但让它决定是否实际的"有效载荷"任务。

要执行此操作,请使用状态文件记录上次运行有效内容的时间。尽管脚本本身经常运行,但有效负载仅在自上次通过后有足够时间运行。

例如,以下脚本每7秒仅运行一次有效负载(最终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_periodic.sh,您可以使用以下方法对其进行测试:

while true ; do ./test_periodic.sh ; sleep 1 ; done

这将每秒运行一次,但您会注意到有效负载仅按预期每7秒(第一次除外)完成:

[0] [1504041523] [1504041523]
[1504041523] [1504041530] [7]
[1504041530] [1504041537] [7]
[1504041537] [1504041544] [7]

1小时:53米,将minGap设置为6780(113分钟,以秒为单位)并让cron每分钟运行一次脚本。

答案 1 :(得分:0)

Cron不会为间隔添加小时和分钟。 */53 */1 * * *在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

请注意,间隔始终在一天开始时重新开始。