【问题标题】:Dynamic cron jobs?动态 cron 作业?
【发布时间】:2011-02-26 07:53:32
【问题描述】:

我正在编写一个脚本,需要在一天中的随机时间调用,但不知道如何实现。

我不想浪费服务器资源来每分钟运行一个 cron 作业。

我希望随机调用脚本,因此提前一个月生成随机时间,然后为每个时间创建 cron 作业不是我想要的。

而且这个脚本每天只需要执行一次。

提前致谢!

【问题讨论】:

    标签: php cron


    【解决方案1】:

    是否每次运行都使用随机时间的“at”提交进一步的运行? 这不能保证它每天都运行,但你可以得到它作为一个平均值。

    【讨论】:

    • 我本来想说做不到,但我什至没有考虑修改 crontab 本身!不错!
    • 这行不通,因为最初的 cron 作业仍然需要经常运行。
    • ...或者有一个每天运行的 cron 作业以在随机时间生成“at”作业。虽然随机运行的原因仍然是个谜。
    • @Jan Kuboschek:也许我误解了最初的答案。我认为关键是 cron 作业在每次运行后都会修改 crontab 以将自身设置为在随机时间再次运行。
    • @Matchu 在这种情况下,你是正确的。
    【解决方案2】:

    如果您可以访问它,请在目标脚本运行时修改 crontab 文件并添加随机时间。

    【讨论】:

      【解决方案3】:

      这将添加一个 cron 作业:

      echo "* * * * * /path/to/script" | crontab
      

      您需要生成一个适当的时间而不是* * * * *(否则它将每分钟运行一次)。

      echo "* * * * * /path/to/script" | crontab -r
      

      将删除该作业。所以,现在你需要从 PHP 脚本中调用它们,我不记得它是如何在 PHP 中完成的。

      编辑

      http://php.net/manual/en/function.system.php

      更多编辑

      每次脚本执行时,最后两个操作可能是删除当前的 cron 作业并为第二天生成另一个。

      更多编辑

      http://codepad.org/Z1B2v4lF -- 这就是我在 Python 中的做法。这可能每天运行一次以上。如果必须每天只运行一次,您也可以添加一个日期值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 1970-01-01
        • 2014-05-27
        • 2015-01-17
        • 2021-12-01
        • 1970-01-01
        相关资源
        最近更新 更多