我想要一个随机每小时运行一次的cronjob。(即,如果第一个任务在58分钟运行,则第二个任务应该在47分钟运行,第三个任务在52分钟运行,以此类推)。但这应该随机运行每小时。有没有办法做到这一点?
不用使用perl或甚至php,只需使用BASH $RANDOM内置除以3600的方式,即可得到一个小时。
0 * * * * sleep $((RANDOM%3600)) && /path/to/yourScript
请记住,如果脚本睡眠时间随机接近一个小时,取决于脚本执行的时间,您可能会遇到一些竞争条件。
SHELL=/bin/bash
。 - dawez您可以每小时在整点运行作业,让它休眠3,599秒,然后执行您的脚本:
0 * * * * /path/to/perl -e 'sleep int rand 3600' && /path/to/yourScript
或者,如果你更喜欢使用PHP
而不是Perl
:
0 * * * * /path/to/php -r 'sleep(rand(0,3599));' && /path/to/yourScript
您可以使用以下方法找到 Perl
的路径:
which perl
PHP
:which php
0 * * * * perl -e 'sleep int rand 3600' && yourScript
。 - Mark Setchellperl -e '...'
执行单引号中的代码作为 Perl 程序。该程序会休眠少于 3,600 秒的随机秒数。当程序完成休眠后,将调用您的脚本。 - Mark Setchell