我想每1小时和x分钟执行一次cronjob
我尝试添加到crontab:
*/53 */1 * * * /myscrop.sh
但是每隔53分钟执行一次,而不是1小时53分钟
答案 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
请注意,间隔始终在一天开始时重新开始。