Cron 每 15 秒运行一次作业

xra*_*alf 20 cron

你能告诉我写什么,crontab以便它/usr/bin/chromium-browser每 15 秒运行一些工作(为了测试我将使用)吗?

Gil*_*il' 32

使用 cron 不能低于一分钟的粒度。您可以做的是,每分钟运行一个脚本来运行您的作业,等待 15 秒并重复。以下 crontab 行将some_job每 15 秒启动一次。

* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job
Run Code Online (Sandbox Code Playgroud)

此脚本假定作业永远不会超过 15 秒。如果下一个实例运行时间过长,那么下面稍微复杂的脚本会注意不运行下一个实例。它依赖于date%s格式的支持(例如 GNU 或 Busybox,因此您可以在 Linux 上使用)。如果直接放在 crontab 中,注意%字符必须写成\%crontab 行。

end=$(($(date +%s) + 45))
while true; do
  some_job &
  [ $(date +%s) -ge $end ] && break
  sleep 15
  wait
done
[ $(date +%s) -ge $(($end + 15)) ] || some_job
Run Code Online (Sandbox Code Playgroud)

但是我会注意到,如果您需要每 15 秒运行一次作业,cron 可能是错误的方法。尽管 unices 适合短期进程,但每 15 秒启动一个程序的开销可能是不可忽略的(取决于程序的要求有多高)。您不能一直运行您的应用程序并让它每 15 秒执行一次任务吗?


Oth*_*eus 14

与其他方法不同的方法:运行 4 个 cronjob,每个间隔 15 秒:

* * * * * sleep 00; timeout 15s some_job
* * * * * sleep 15; timeout 15s some_job
* * * * * sleep 30; timeout 15s some_job
* * * * * sleep 45; timeout 15s some_job
Run Code Online (Sandbox Code Playgroud)

为了防止工作与自身形成干扰,我们限制了它的运行时间为15秒通过GNU的coreutils 'timeout为每个作业。但是请注意,如果作业未能在 15 秒结束时立即正确退出,您可能仍会遇到问题。有关如何解决该问题的详细信息,请参阅命令手册。另请注意,如果命令确实花费了超过 15 秒的时间,并且超时将其杀死,您将获得非零退出状态,这将触发 cronjob-email。