问题描述
我有一个需要每五秒运行一次的脚本。我知道cron
可以按分钟完成任务,但有没有办法每秒运行一次?
最佳解决方案
Cron只允许至少一分钟。你可以做的是编写一个带有无限循环的shell脚本来运行你的任务,然后睡5秒钟。这样,您的任务将每5秒运行一次或多或少,具体取决于任务本身需要多长时间。
#!/bin/bash
while true; do
# Do something
sleep 5;
done
您可以使用上面的内容创建my-task.sh
文件,并使用sh my-task.sh
运行它。您可以选择使用supervisor
将其配置为服务,以便在系统引导时启动它等。
这听起来确实像你在做一些你可能不应该做的事情。这感觉不对。
次佳解决方案
你可以每隔一分钟就有一个cron
作业kick-off脚本启动12个后台进程:
* * * * * ~/dostuff.sh
dostuff.sh
:
(sleep 5 && /path/to/task) &
(sleep 10 && /path/to/task) &
(sleep 15 && /path/to/task) &
(sleep 20 && /path/to/task) &
(sleep 25 && /path/to/task) &
(sleep 30 && /path/to/task) &
(sleep 35 && /path/to/task) &
(sleep 40 && /path/to/task) &
(sleep 45 && /path/to/task) &
(sleep 50 && /path/to/task) &
(sleep 55 && /path/to/task) &
(sleep 60 && /path/to/task) &
不过,我的问题是,你在做什么,你需要每隔5秒运行一次吗?
第三种解决方案
只需使用一个循环:
while true ; do ./your-script & sleep 5; done
这将启动your-script作为后台作业,睡眠5秒钟,然后再循环。您可以使用Ctrl-C中止它,或使用任何其他条件而不是true
,例如! test -f /tmp/stop-my-script
仅在文件/tmp/stop-my-script
不存在时循环。
第四种方案
你可以使用GNU包mcron,一个”Vixie cron”替代品。
http://www.gnu.org/software/mcron/manual/mcron.html#Top
“可以很容易地指定更精细的time-points,即秒。原则上这可以延长到微秒,但这没有实现。”
第五种方案
cron中的最小配置是分钟,您不能将其设置为5秒。你可以使用允许秒数的Quartz。 http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
第六种方案
使用cacti监控路由器和交换机,但Cron只允许至少一分钟,因此如果一个端口/设备关闭,则在两分钟之前没有警告。