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

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

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

答案1

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

#!/bin/bash

while true; do
  # Do something
  sleep 5;
done

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

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

答案2

您可以让一个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 秒运行一次吗?

答案3

只需使用循环:

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

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

答案4

您可以使用 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配置,启用计时器单元并启动它。

相关内容