当前位置: 首页>>技术教程>>正文


如何每5秒运行一次脚本?

, ,

问题描述

我有一个需要每五秒运行一次的脚本。我知道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只允许至少一分钟,因此如果一个端口/设备关闭,则在两分钟之前没有警告。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1660.html,未经允许,请勿转载。