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

myu*_*uf3 80 scripts cron

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

Tom*_*unn 71

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

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done
Run Code Online (Sandbox Code Playgroud)

您可以my-task.sh使用上述内容创建一个文件并使用sh my-task.sh. 您可以选择将其配置supervisor为服务,以便在系统启动等时启动。

听起来确实好像您正在做一些您可能不应该做的事情。这感觉不对


小智 43

您可以让cron工作每分钟启动一个脚本,从而启动 12 个后台进程:

* * * * * ~/dostuff.sh
Run Code Online (Sandbox Code Playgroud)

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) &
Run Code Online (Sandbox Code Playgroud)

不过,我的问题是,你能在地球上做什么需要每 5 秒运行一次?

  • `What on EARTH` - 统计、垃圾收集、文件同步、在线状态,应有尽有。 (47认同)
  • 为近实时数据引用外部 API。每 5 秒运行一次请求比在每次浏览量上执行一次要好得多。 (8认同)
  • 这不好!它可能会*一次多次*运行脚本*(如果它恰好花费超过 5 秒的时间),这可能导致访问的任何(甚至是临时)文件中的竞争条件。如果同时做同样的事情两次可能会导致问题,请不要这样做!(而且**通常**会!) (3认同)

blu*_*yed 29

只需使用循环:

while true ; do ./your-script & sleep 5; done
Run Code Online (Sandbox Code Playgroud)

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


Dav*_*vid 12

您可以使用 GNU 包mcron,这是“Vixie cron”的替代品。

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

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


Gus*_*uss 7

您可以使用 SystemD 计时器单元,它将每 5 秒触发一次服务 - 您将其设置为执行您想要的操作。

假设您的服务单元被调用mystuff.service并安装在/etc/systemd/system(如果您想替换用户的 crontab,请查看SystemD 用户服务),那么您可以编写一个计时器单元在启动时运行该服务,然后每 5 秒运行一次,如下所示:

/etc/systemd/system/mystuff.timer

[Unit]
Description=my stuff's schedule
[Timer]
OnBootSec=5
OnUnitActiveSec=5
[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)

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

  • 这是最好的解决方案,唯一的缺点是 cron 更容易概述和配置。SystemD 是一个痛苦的问题,它从它的目录结构开始。仍然是 5 秒间隔的最佳选择 (2认同)