为特定日期和小时创建随机分钟cron作业

时间:2014-10-26 21:04:22

标签: php cron

我一直在尝试做随机cron工作,我选择年份日期和小时,但分钟是随机的。

我的第一次尝试是每分钟运行一次cron,然后将一个随机日期与今天的日期进行比较:

我以fake_time格式将随机日期插入数据库列2014-10-26 17 rand(0,59)。在我每分钟运行cron的php页面中:

if($row["fake_time"] == date("Y-m-d H i")){
    //do stuff
}

这完美无缺。但后来我发现我无法每分钟运行cron因为我的主持人(hostgator)不允许我这样做!您是否有任何关于如何以其他方式做到这一点的想法?


或者我应该在https://www.easycron.com/上进行设置呢?

2 个答案:

答案 0 :(得分:1)

我认为你受到一天中可以运行的cron工作数量的限制,IIRC主持人对基本计划有每日限制。要解决此限制,IMO,您有两种选择:

  1. 转到sleep 60秒

    基本上,每天在规定的时间运行cron作业,并检查你的情况,如果不是True,那么进入睡眠状态60秒。

    if($row["fake_time"] == date("Y-m-d H i")){
        //do stuff
    } else {
        sleep(60);
    }
    

    这样,你有一个单独的cron作业,虽然它运行了很长时间。如果您每天只能运行cron作业,并且您希望以随机小时和分钟运行,您可以更改逻辑并进入睡眠状态3600秒进行每小时睡眠,然后进行微小睡眠60秒。

    您可能需要相应地设置set_time_limit

  2. 设置easycron

    如果由于无法设置时间限制而突然终止您的cron作业,则需要使用easycron服务。

    在这种情况下,将上面的脚本代码放在一个php文件中,比如script.php,然后安排一个cronjob来点击这个脚本的get请求。在这种情况下,您的命令看起来像

    wget your.domain.com/script.php
    

答案 1 :(得分:0)

如果没有技术问题,可以使用php脚本(无需安装)。

if(rand(1, 5) == 1){
// do your staff
}

如果您认为脚本不会经常执行,则可以减少差异rand(1,3)