【问题标题】:Set cron job php设置cron作业php
【发布时间】:2012-11-12 08:53:41
【问题描述】:

如何以编程方式设置 cron 作业,

我们为我们的项目制作了一个安装程序,在安装时我需要使用 PHP 以编程方式设置一个 cron 作业。

请注意项目可以在LINUX/WINDOWS上运行,

我怎样才能做到这一点?还是有比 CRON JOB 更好的选择。

我正在使用 Codeigniter(始终欢迎基于原生 php 的解决方案,但如果通过 CI 将非常有帮助)

cron 作业包括

  1. 检查特定表并删除无效数据
  2. 将值从 mailServer 插入 DB
  3. 检查某些文件的可用性。

谢谢。

【问题讨论】:

标签: php codeigniter cron


【解决方案1】:

这是一篇不错的文章,用于从 PHP 管理您的 Cron 作业

http://net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2/

此示例包含有关如何从 PHP 编写 Cron 作业的完整描述,该作业可通过带有完整源代码的界面进行管理。

【讨论】:

    【解决方案2】:

    Cron 是 linux 的作业调度程序。它不能在 Windows 上工作(除非你开始喜欢 Cygwin 和 etecetera)。如果您必须在系统范围内支持它,跨各种未知系统并且全部使用 PHP(无法按原样安排事情),您可以使用以下三种解决方案中的任何一种:

    来自地面控制的呼叫
    (资源最好,具体时间,最优雅的解决方案)

    1. 让您自己的机器运行 cron 并通过 ssh 连接其他机器以运行命令
    2. 让您自己的机器运行 cron 并访问 "secret url's" ro 运行命令
    3. 有一个外部服务,比如SetCronJob 调用你的"secret url's"

    Random Job Runner
    (最容易实现,资源适中)

    如果您需要做的事情不会直接影响用户在您网站上的行为方式,而且它对时间不敏感(只需要做),您可以求助于以统计概率运行它。

    // this will run on average once every 100 page views
    if(rand(1, 100)==1) runJobQueue();
    

    最坏的情况
    (资源更难)

    如果您的工作必须经常完成,因为它会直接影响用户并且它必须满足一些时间安排,您可以保存查询并使用上次运行时间戳更新数据库,并继续检查该工作是否必须重新运行

    // if has passed 1 hour since last update... re-update it
    $result = mysql_query("SELECT `timestamp` FROM job_times WHERE whatever...")
    if(mysql_result($result, 2) >= ( now() - 3600)) {
        runJobQueue()
    

    【讨论】:

      【解决方案3】:

      cron 作业可用于 linux,Windows 中的替代方案是调度任务。 http://support.microsoft.com/kb/308569

      【讨论】: