繁体   English   中英

如何让cron每隔“N”分钟运行一次,其中n%5 == 1?

[英]How do I make cron run something every “N”th minute, where n % 5 == 1?

我知道我可以在cron中每五分钟运行一次,如下所示:

 */5 * * * * /my/script

如果我不希望它在12点,12点05分,12点10分运行,而是在12:01,12:06,12:11等运行怎么办? 我想我可以这样做:

 1,6,11,16,21,26,31,36,41,46,51,56 * * * * /my/script

......但那很难看。 有更优雅的方式吗?

1-56/5 * * * * /my/script

这应该适用于vixiecron,我不确定其他实现。

使用您的第一个计划:

*/5 * * * * /my/script

并将其添加到脚本的开头:

sleep 60

(是的,这是一个笑话)

这是一个相当古老的话题,但是由于时间已经过去,现在还有其他一些选择。 其中一个根本不使用cron,并使用systemd计时器。 使用这些可以提供比秒更高的粒度以及许多其他选项

有关更多信息,请访问https://wiki.archlinux.org/index.php/Systemd/Timers

例如,运行adhoc命令

# systemd-run --on-calendar="*:1/5" /bin/touch /tmp/foo2
Running timer as unit run-r31335c4878f24f90b02c8ebed319ca60.timer.
Will run service as unit run-r31335c4878f24f90b02c8ebed319ca60.service.

# systemctl status run-r31335c4878f24f90b02c8ebed319ca60.timer
● run-r31335c4878f24f90b02c8ebed319ca60.timer - /bin/touch /tmp/foo2
   Loaded: loaded
Transient: yes
  Drop-In: /run/systemd/system/run-r31335c4878f24f90b02c8ebed319ca60.timer.d
           └─50-Description.conf, 50-OnCalendar.conf, 50-RemainAfterElapse.conf
   Active: active (waiting) since Wed 2017-10-25 09:05:13 UTC; 40s ago

# ls -l  /tmp/foo*
-rw-r--r-- 1 root root 0 Oct 25 09:06 /tmp/foo2

# sleep 300; ls -l  /tmp/foo*
-rw-r--r-- 1 root root 0 Oct 25 09:11 /tmp/foo2

# date; ls -l /tmp/foo2
Wed Oct 25 09:21:42 UTC 2017
-rw-r--r-- 1 root root 0 Oct 25 09:21 /tmp/foo2

编辑:这些类型的计时器不会持续重启,如果你想让他们确保你生成一个适当的服务文件,与相关的oncalendar行

我创建了一个新的脚本“delaystart”,它将休眠期作为第一个参数,脚本作为其余参数运行。 我让脚本检查脚本的crontab行,如果没有注释掉行,则只启动脚本。 这使得它可以重用,并且ps不会报告脚本是否正在运行,而实际上并非如此。

#!/bin/bash
sleeptime=$1
sleep ${sleeptime}
shift
if ( ! crontab -l | grep -e '#.+delaystart '${sleeptime} $* ) then
  $*
fi

sean.bright的笑话让我思考......为什么不用...

* * * * * /my/script

...并在脚本中执行此操作...

#!/bin/bash
export WHEN=`date '+%M'`
echo $WHEN
export DOIT=`echo "$WHEN % 5" | bc` 
echo $DOIT
if [ $DOIT != 0 ] ; then
    echo "ha ha ha"
fi
echo "done"

......一个kludge ......也许,但是像crontab一样难看......我不知道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM