你能建议我写什么,crontab
以便它/usr/bin/chromium-browser
每 15 秒运行一些作业(为了测试我将使用)?
答案1
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 可能是错误的方法。尽管 unice 非常适合短期进程,但每 15 秒启动一个程序的开销可能是不可忽略的(取决于程序的要求有多高)。您不能一直运行您的应用程序并让它每 15 秒执行一次任务吗?
答案2
与其他方法不同:运行 4 个 cronjobs,每个 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
为了防止作业干扰自身,我们通过 GNU 将其运行时间限制为 15 秒核心工具'timeout
对于每项工作。但请注意,如果作业未能在 15 秒结束时立即正确退出,您仍然可能会遇到问题。有关如何解决该问题的详细信息,请参阅命令手册。另请注意,如果该命令花费的时间超过 15 秒,并且超时终止了它,您将获得非零退出状态,这将触发 cronjob-email。
答案3
简而言之,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 秒运行一次的脚本......
答案4
在你的 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