myusuf3 Asked: 2010-08-05 11:03:19 +0800 CST2010-08-05 11:03:19 +0800 CST 2010-08-05 11:03:19 +0800 CST 如何每 5 秒运行一次脚本? 772 我有一个脚本需要每五秒运行一次。我知道它cron可以按分钟完成任务,但是有没有办法每秒运行一些东西? scripts cron 8 个回答 Voted Best Answer Tommy Brunn 2010-08-05T11:07:59+08:002010-08-05T11:07:59+08:00 Cron 只允许至少一分钟。您可以做的是编写一个带有无限循环的 shell 脚本来运行您的任务,然后休眠 5 秒。这样,您的任务将或多或少每 5 秒运行一次,具体取决于任务本身需要多长时间。 #!/bin/bash while true; do # Do something sleep 5; done my-task.sh您可以使用上述内容创建一个文件并使用sh my-task.sh. 或者,您可以将其配置supervisor为服务,以便它在系统启动等时启动。 听起来你确实在做一些你可能不应该做的事情。这感觉不对。 warren 2010-08-05T11:24:11+08:002010-08-05T11:24:11+08:00 您可以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 秒运行一次吗? blueyed 2010-08-05T12:51:17+08:002010-08-05T12:51:17+08:00 只需使用一个循环: while true ; do ./your-script & sleep 5; done 这会将您的脚本作为后台作业启动,休眠 5 秒钟,然后再次循环。您可以使用 Ctrl-C 中止它,或使用任何其他条件代替true,例如! test -f /tmp/stop-my-script仅在文件/tmp/stop-my-script不存在时循环。 David 2014-05-14T07:24:25+08:002014-05-14T07:24:25+08:00 您可以使用 GNU 包mcron,一个“Vixie cron”替代方案。 http://www.gnu.org/software/mcron/manual/mcron.html#Top “可以很容易地允许指定更精细的时间点,即秒。原则上这可以扩展到微秒,但这没有实现。” Guss 2018-12-01T05:29:40+08:002018-12-01T05:29:40+08:00 您可以使用 SystemD 计时器单元,它会每 5 秒触发一次服务 - 您设置为执行您想要的操作。 假设您的服务单元被调用mystuff.service并安装在其中(如果要替换用户的 crontab,/etc/systemd/system请查看SystemD 用户服务),那么您可以编写一个计时器单元以在启动时运行该服务,然后每 5 秒运行一次,如下所示: /etc/systemd/system/mystuff.timer [Unit] Description=my stuff's schedule [Timer] OnBootSec=5 OnUnitActiveSec=5 [Install] WantedBy=timers.target 然后重新加载 systemd 配置,启用计时器单元并启动它。 Cody Harlow 2010-08-05T11:07:11+08:002010-08-05T11:07:11+08:00 cron 中的最小配置是分钟,不能设置为 5 秒。你可以使用 Quartz,它确实允许秒。http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html qttty 2012-11-26T18:25:11+08:002012-11-26T18:25:11+08:00 使用 cacti 监控路由器和交换机,但 Cron 只允许至少一分钟,所以如果一个端口/设备关闭,直到两分钟后才会发出警告。 Alister Bulman 2010-08-05T11:28:25+08:002010-08-05T11:28:25+08:00 我已经非常成功地完成了这类事情(最终结果一次运行数周,直到机器重新启动)。至于我现在在做什么,更新信息并将其放入缓存 - 每 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' 行启动。
Cron 只允许至少一分钟。您可以做的是编写一个带有无限循环的 shell 脚本来运行您的任务,然后休眠 5 秒。这样,您的任务将或多或少每 5 秒运行一次,具体取决于任务本身需要多长时间。
my-task.sh
您可以使用上述内容创建一个文件并使用sh my-task.sh
. 或者,您可以将其配置supervisor
为服务,以便它在系统启动等时启动。听起来你确实在做一些你可能不应该做的事情。这感觉不对。
您可以
cron
每分钟启动一个脚本,从而启动 12 个后台进程:dostuff.sh
:不过,我的问题是,你能在地球上做什么,需要每 5 秒运行一次吗?
只需使用一个循环:
这会将您的脚本作为后台作业启动,休眠 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
“可以很容易地允许指定更精细的时间点,即秒。原则上这可以扩展到微秒,但这没有实现。”
您可以使用 SystemD 计时器单元,它会每 5 秒触发一次服务 - 您设置为执行您想要的操作。
假设您的服务单元被调用
mystuff.service
并安装在其中(如果要替换用户的 crontab,/etc/systemd/system
请查看SystemD 用户服务),那么您可以编写一个计时器单元以在启动时运行该服务,然后每 5 秒运行一次,如下所示:/etc/systemd/system/mystuff.timer
然后重新加载 systemd 配置,启用计时器单元并启动它。
cron 中的最小配置是分钟,不能设置为 5 秒。你可以使用 Quartz,它确实允许秒。http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html
使用 cacti 监控路由器和交换机,但 Cron 只允许至少一分钟,所以如果一个端口/设备关闭,直到两分钟后才会发出警告。
我已经非常成功地完成了这类事情(最终结果一次运行数周,直到机器重新启动)。至于我现在在做什么,更新信息并将其放入缓存 - 每 10 秒更新一次。
'exec $0' 重新启动脚本,但替换正在运行的脚本。它最初可以使用 crontab '@reboot' 行启动。