Cron每15秒执行一次作业


Answers:


27

使用cron不能超过一分钟。您可以做的是每分钟运行一个脚本,该脚本运行您的工作,等待15秒钟,然后重复执行。以下crontab行将some_job每15秒开始一次。

* * * * * for i in 0 1 2; do some_job & sleep 15; done; some_job

该脚本假定作业将不会超过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

但是,我会指出,如果您需要每15秒执行一次作业,那么cron可能是错误的方法。尽管unices对于短暂的进程很有用,但是每15秒启动一个程序的开销可能是微不足道的(取决于程序的要求)。您不能一直运行应用程序并让它每15秒执行一次任务吗?


也可能是:对于我来说1 2 3 4 ; do some_job & sleep 15; done(最后一次睡眠不会影响下一次运行),但是您这样做的方式可能更适合于发出cronjob邮件的时间(在最后一次some_job之后发送,在之后的15s中发送)我的变体)
Olivier Dulac


13

与其他方法不同:运行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

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


辉煌,尽管重复。
Mike Kormendy '17

1
真好 如果一个进程运行时间很长,那么下一个进程也可能会以另一个核心结束。不知道是否可以为Cron作业故意设置核心亲和力,但这可能会使这种方法更好。
蒂姆(Tim)

@蒂姆的好点。我在一个编辑中解决了这个问题。
Otheus

2

简而言之,cron不会随着时间的流逝而变得如此细微。您将获得的最短时间是1分钟。

#       .---------------- minute (0 - 59)
#       |       .------------- hour (0 - 23)
#       |       |       .---------- day of month (1 - 31)
#       |       |       |       .------- month (1 - 12) OR jan,feb,mar,apr ...
#       |       |       |       |       .----- day of week (0 - 6) (Sunday=0 or 7)  OR sun,mon,tue,wed,thu,fri,sat
#       |       |       |       |       |
#       *       *       *       *       *       command to be executed
        *       *       *       *       /usr/bin/chromium-browser

但是,您可以编写一个每15秒运行一次的脚本...


* * * * * /usr/bin/chromium-browser在crontab中有一行。根据手册,它应该每分钟运行一次,但是什么也没有运行。
xralf 2011年

编写这样的脚本难吗?我应该问另一个问题还是可以在这里写下?
xralf 2011年

Cron作业没有终端,因此我希望浏览器失败。它可能会默默地这样做。
BillThor

我的cron日志位于/ var / log / cron中,以获取redhat的派生版本,即。fedora,centos等。它也可能有助于您准确描述您要执行的操作,这样人们可以全面了解正在发生的事情。
rfelsburg

1

在您的crontab中:

* * * *  /usr/bin/chromium-browser_starter

然后在/usr/bin/chromium-browser_starter

#!/bin/sh

# chromium-browser_starter
#
# Schedules /usr/bin/chromium-browser to run every 15 seconds for a minute.
# Intended to be called every minute through crond(8).

for ((secs=0; secs<46; secs+=15)); do
    (sleep $secs; /usr/bin/chromium-browser "$@") &
done

wait

ps aux | grep chrom一分钟后写信时,我看不到铬浏览器在运行。
xralf 2011年

@xralf-脚本最多只执行几秒钟。尝试grepping sleep
amphetamachine
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.