【问题标题】:Create random minute cron job for a specific date and hour为特定日期和时间创建随机分钟 cron 作业
【发布时间】:2014-12-22 01:31:47
【问题描述】:

我一直在尝试做随机的 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/ 上设置它吗?

【问题讨论】:

  • 这对你来说是个好样本,检查一下:stackoverflow.com/questions/9049460/…
  • 您的托管服务商允许您做什么?我认为@M.Abooali 评论中的解决方案应该很好用。
  • 更大的问题是 - 你为什么要这样做?例如,WordPress 已经有一个插件来检查网站的可用性。
  • 我在写这篇博文。哪些帖子发布到 facebook 和 twitter。我不希望我的追随者认为我是机器人……我是。
  • 您的网站有多忙?如果您获得一致的流量,您可以完全放弃 cron,并使用数据库支持的队列,该队列通过用户访问提供服务。

标签: php cron


【解决方案1】:

我认为您受到一天内可以运行的 cron 作业数量的限制,IIRC hostgator 对基本计划有每日限制。为了解决这个限制,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
    

【讨论】:

    【解决方案2】:

    如果没有技术问题,你可以用你的php脚本来解决(不需要安装)。

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

    如果你觉得脚本执行的频率不够,可以减差rand(1,3)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      相关资源
      最近更新 更多