it-swarm.cn

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

我有一个需要每五秒运行一次的脚本。我知道cron可以按分钟完成任务,但有没有办法每秒运行一次?

65
myusuf3

Cron只允许至少一分钟。你可能做的是编写一个带有无限循环的Shell脚本来运行你的任务,然后睡5秒钟。这样,您的任务将每5秒运行一次或多或少,具体取决于任务本身需要多长时间。

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done

您可以使用上面的内容创建my-task.sh文件,并使用sh my-task.sh运行它。 (可选)您可以使用supervisor将其配置为服务,以便在系统引导时启动它等。

这听起来确实像你在做一些你可能不应该做的事情。这感觉错误

64
Tommy Brunn

您可以每分钟启动一个cron作业启动脚本,从而启动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秒运行一次?

35
warren

只需使用一个循环:

while true ; do ./your-script & sleep 5; done

这将启动您的脚本作为后台作业,睡眠5秒,然后再次循环。您可以使用Ctrl-C中止它,或使用任何其他条件而不是true,例如! test -f /tmp/stop-my-script仅在文件/tmp/stop-my-script不存在时循环。

27
blueyed

你可以使用GNU packagemcron,一个“Vixie cron”替代品。

http://www.gnu.org/software/mcron/manual/mcron.html#Top

“可以轻松地指定更精细的时间点,即秒。原则上这可以扩展到微秒,但这不会实现。”

10
David

使用cacti监控路由器和交换机,但Cron只允许至少一分钟,因此如果一个端口/设备关闭,则在两分钟之前没有警告。

2
qttty

Cron中的最小配置是分钟,您不能将其设置为5秒。你可以使用允许秒数的Quartz。 http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html

2
Cody Harlow

你可以使用一个SystemD计时器单元,它将触发一个服务 - 你设置为每隔5秒做你想做的事。

假设您的服务单元名为mystuff.service并安装在/etc/systemd/system中(检出 SystemD用户服务 如果要替换用户的crontab),那么您可以编写一个计时器单元来在启动时运行该服务然后每5秒钟,像这样:

/etc/systemd/system/mystuff.timer

[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target

然后重新加载systemd配置,启用计时器单元并启动它。

2
Guss

我已经非常成功地完成了这种事情(最终结果是一次几周,直到机器重新启动)。至于我现在正在做什么,更新信息并将其放入缓存 - 每10秒更新一次。

#!/bin/sh

SLEEP=5

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# do stuff
sleep $SLEEP

# echo and restart...
exec $0

'exec $ 0'重新启动脚本,但替换正在运行的脚本。它最初可以使用crontab'@reboot'行启动。

1
Alister Bulman