【问题标题】:Server-side scheduled tasks: need to schedule a task that happens with a frequency of 5 seconds服务端定时任务:需要调度一个频率为 5 秒的任务
【发布时间】:2013-08-07 18:33:06
【问题描述】:

我需要编写一个服务器端程序,该程序位于服务器上,并不断检查数据库中的新条目。

当数据库中出现新条目时,程序应该处理数据并将结果放在其他地方。

重要的是要强调该过程不是由出现的新条目引发的,而是由程序自行检查新条目引起的。

与我交谈过的一些人提出了 cron 工作,我很好奇如果这对我来说是解决方案怎么办?我看到它有局限性,它不会每分钟运行一次。我希望该程序每 5 秒运行一次,我最好编写一个 shell 脚本还是盗版修复?

【问题讨论】:

    标签: php database shell cron


    【解决方案1】:

    我不确定这是否是传统的(?)但是...

    在运行外部程序(PHP、Python 等)的 INSERT 上使用数据库触发器。您使用的是哪个数据库?我认为这篇文章很旧但可能会有所帮助:http://crazytechthoughts.blogspot.co.uk/2011/12/call-external-program-from-mysql.html

    【讨论】:

    • 我的第一个想法也是,但 OP 表示 重要的是要强调该过程不是由出现的新条目引发的,而是由程序自行检查新条目。
    • 嗯,对不起。稍后我可能会删除我的答案。
    • 也许你可以传递 PHP 程序的 OLD 和 NEW 值并让它检查?不过我从来没有这样做过……
    【解决方案2】:

    在处理我一直在处理的队列时,我经常使用一种技术。

    #!/bin/sh
    php -f checkDBAndAct.php
    sleep 5
    exec $0
    

    exec $0 部分重新启动脚本运行,在内存中替换自身,因此它将永远运行而不会出现问题。 PHP 脚本使用的任何内存在退出时都会被清理,所以这也不是问题。

    一个简单的行将启动它,并把它放到后台:

    cd /x/y/z ; nohup ./loopToProcessDB.sh &
    

    或者机器启动时也可以类似的启动方式(比如Cron的'@reboot ....')

    --来自https://stackoverflow.com/a/2686100/6216 扩展版在http://PHPscaling.comhttps://gist.github.com/alister/1386212

    虽然我会使用实际的队列系统,而不是数据库,因为将数据库用于此任务有许多缺点。

    【讨论】:

      猜你喜欢
      • 2012-08-30
      • 2018-09-30
      • 2015-11-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 2019-06-17
      相关资源
      最近更新 更多