背景php任务,cron替代品

时间:2016-11-09 15:52:27

标签: php cron rabbitmq daemon gearman

我的php项目中有一些后台任务。如果某些条件满足,它应该做一些工作。例如:如果有一些订单尚未交付,剩余时间估计交货时间少于15分钟,系统会向快递员发送通知,告知他可能已经晚了。

最简单的解决方案 - 创建每分钟运行php脚本的cron任务。该脚本将检查该条件并在条件满足时发送通知。

另一种方法是队列。我看着gearman和rabbitmq,但是我可以看到它们是另一个用例。如果您有一些直接发送任务的客户端,它们就适合。在我的情况下,我没有任何客户端,它只是系统中的一些条件。

我想到的最后一个解决方案是使用无限循环编写自定义php-daemon。在每次迭代中,它检查条件,如果满意则完成工作并休眠1分钟。但是内存泄漏,守护进程重启等可能存在问题。

那么,现代php中这个问题的最佳解决方案是什么?

3 个答案:

答案 0 :(得分:0)

如果cron可以为你完成这项工作,那么一定要使用它。当有经过验证的工具可以完成工作时,为什么要重新发明轮子?我写了一些

while (1) {
// run forever scripts
}

他们跑了几个月没有错;他们处理的消息队列是简单的mysql表。但是,如果你这样做,你将需要一个cron作业来检查while (1)进程状态,你需要一些锁定来防止进程多次启动,等等。只需使用cron。

答案 1 :(得分:0)

如果你不喜欢使用cronjob,我猜你最好的选择就是写一个守护进程。我喜欢在Perl中编码,如果我是你,我会在Perl中编写一个守护进程。

但是,如果我在PHP中编写守护进程,我会在cronjob中运行另一个备份脚本(例如10分钟间隔),这将检查我的php守护程序是否正在运行,如果没有运行则重启守护进程。

答案 2 :(得分:-1)

我会为这个或laravel队列创建一个小nodejs应用程序:

https://laravel.com/docs/5.3/queues

取决于你。