即使在我的专用服务器上,也无法将cron时间设置为不到1分钟。 我需要它每15秒运行一次因为它调用betfair api并且计算高度依赖于时间。 请指教。
答案 0 :(得分:11)
如果您需要每15秒调用一次作业,请不要使用cron。 cron旨在用于请求稍后完成的工作。
相反,在父完成作业后,睡眠15秒然后调用子脚本,然后退出。子脚本可以完成它的工作,睡眠15秒然后调用下一个脚本。泡沫,冲洗,重复。
如果您的服务器没有时间限制,那么您甚至不需要生成子脚本。只要睡15秒,做你的事,睡15秒,做下一件事,依此类推。睡眠脚本不消耗CPU,但它消耗RAM。但这比循环主机的PID更好;这可能会让你的主人感到不安。
答案 1 :(得分:7)
Cron只允许你以每分钟一次的速度运行。
我要做的是在你的剧本中做15秒的时间。
答案 2 :(得分:1)
Cron是一个作业调度程序,它具有至少一分钟的分辨率。如果您需要更精细的分辨率,您必须找到另一个计划工具或自己动手。
我过去使用的一个如下。您配置了所需的间隙和最小间隙,以下脚本将每N
秒执行一次有效负载。请注意,这不是一个简单的“每次迭代之间等待N
秒”调度程序。它实际上是在前一个开始之后的N
秒开始,而不是在结束之后。
最小间隙是这样的,如果你的有效载荷超过N
秒,它就不会连续运行。如果你做希望它在那种情况下连续运行,只需将最小间隙设置为0。
执行此操作的代码如下:
#!/usr/bin/bash
payload() {
if [[ $1 -eq 1 ]] ; then
echo "Sleeping for 1 second at $(date +%H:%M:%S)."
else
if [[ $1 -lt 10 ]] ; then
echo "Sleeping for $1 seconds at $(date +%H:%M:%S)."
else
echo "Sleeping for $1 seconds at $(date +%H:%M:%S)."
fi
fi
sleep $1
echo " Finished at $(date +%H:%M:%S)."
echo
}
gap=10
mingap=3
for i in {1..20} ; do
next=$(($(date +%s) + ${gap}))
payload ${i}
if [[ ${mingap} -ne 0 ]] ; then
sleep ${mingap}
fi
while [[ $(date +%s) -lt ${next} ]] ; do
sleep 1
done
done
有效负载不是逻辑的一部分,它只是我用于调试目的的东西。您可以用任何你想要的东西替换它。此外,for
循环也是一个示例。您可以使用无限循环替换它,或者让脚本仅执行(例如)60分钟的迭代,并且每小时cron
启动一个新的脚本实例。
示例运行如下。您可以看到有效载荷每十秒钟运行一次(由于sleep
的变幻莫测,奇数十一秒),直到需要超过七秒才能完成。那时,最小差距开始了。
Sleeping for 1 second at 14:36:08.
Finished at 14:36:09.
Sleeping for 2 seconds at 14:36:18.
Finished at 14:36:20.
Sleeping for 3 seconds at 14:36:28.
Finished at 14:36:31.
Sleeping for 4 seconds at 14:36:39.
Finished at 14:36:43.
Sleeping for 5 seconds at 14:36:49.
Finished at 14:36:54.
Sleeping for 6 seconds at 14:37:00.
Finished at 14:37:06.
Sleeping for 7 seconds at 14:37:10.
Finished at 14:37:17.
Sleeping for 8 seconds at 14:37:20.
Finished at 14:37:28.
Sleeping for 9 seconds at 14:37:31.
Finished at 14:37:41.
Sleeping for 10 seconds at 14:37:44.
Finished at 14:37:54.
Sleeping for 11 seconds at 14:37:57.
Finished at 14:38:08.
Sleeping for 12 seconds at 14:38:11.
Finished at 14:38:23.
Sleeping for 13 seconds at 14:38:27.
Finished at 14:38:40.
Sleeping for 14 seconds at 14:38:43.
Finished at 14:38:57.
Sleeping for 15 seconds at 14:39:00.
Finished at 14:39:15.
Sleeping for 16 seconds at 14:39:18.
Finished at 14:39:34.
Sleeping for 17 seconds at 14:39:38.
Finished at 14:39:55.
Sleeping for 18 seconds at 14:39:58.
Finished at 14:40:16.
Sleeping for 19 seconds at 14:40:19.
Finished at 14:40:38.
Sleeping for 20 seconds at 14:40:41.
Finished at 14:41:02.