添加一份工作来cron并执行每1h和x分钟



我想每1小时执行一次cronjob

我尝试添加到crontab:

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

但脚本每53分钟执行一次,而不是1H和53分钟

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

由于您希望自己的工作每1H:53m(1.13亿)发生,因此您只能每分钟运行,但具有合适的步骤值,例如:

*/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_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

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

注意,间隔总是在一天开始时重新启动。

最新更新