我需要编写一个服务器端程序,它存在于服务器上,并且不断检查数据库中的新条目。
当数据库中出现新条目时,程序应该处理数据并将结果放在其他地方。
重要的是要强调该过程不是由出现的新条目引发的,而是由程序自行检查新条目引起的。
一些与我交谈过的人提出了 cron 工作,我很好奇如果这对我来说是解决方案怎么办?我看到它有局限性,它不会每分钟运行一次。我希望程序每 5 秒运行一次,我最好写一个 shell 脚本还是盗版修复?
在处理我一直在处理的队列时,我经常使用一种技术。
#!/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.com和https://gist.github.com/alister/1386212
虽然我会使用实际的队列系统,而不是数据库,因为将数据库弯曲到这个任务有很多缺点。
我不确定这是否是传统的(?)但是......
在运行外部程序(PHP、Python 等)的 INSERT 上使用数据库触发器。您使用的是哪个数据库?我认为这篇文章很旧,但可能会有所帮助:http ://crazytechthoughts.blogspot.co.uk/2011/12/call-external-program-from-mysql.html