2012-02-05 46 views
0

与crontab执行后台任务的方式相比,在php上编写一个守护进程(它监听/处理队列)是否如此耗费内存?Memcacheq vs cronjob在内存消耗方面

我在一台服务器下有一个〜600个商店。有些任务店主运行需要很多时间,所以分叉它们是合理的。把任务放到cron中效果很好,我只是不喜欢延迟59秒(限制cron)。所以我想尝试队列系统。我只是害怕它会迫使我运行600个PHP线程来监听/处理这些队列(商店来自不同的客户,我无法制作一个通用的守护进程)。它不会自动需要大约600-1000MB的内存,与cron相比,它不是一个好的选择(只有在计划时才加载进程)。

回答

1

为什么不使用“at”守护进程运行它们,而不是将它们放入延迟59秒的cron中?你可以简单地使用“现在”,他们会立即运行。见,例如,:

http://unixhelp.ed.ac.uk/CGI/man-cgi?at

我肯定不会考虑在PHP同时运行600个线程的守护程序。

+0

感谢你们让我清醒:)好吧,“at”对我来说是新东西,而我曾经使用过“nohup”。在这种情况下,“nohup”有什么不同?因为exec(“nohup php mytask.php”)看起来比exec更简单(“echo'php mytask.php'| at now”); – 2012-02-05 19:50:42

+0

nohup表示当用户运行注销时,该进程不会被终止;它本身并不足以解决你的问题,但如果你添加一个&符号(使nohup任务在后台运行),它可能会工作。所以这会让你'exec(“nohup php mytask.php&”) 另请参阅:http://en.wikipedia.org/wiki/Nohup – Daan 2012-02-05 20:16:47

+0

谢谢大安,我忘了添加&,是那些命令现在相当于? – 2012-02-06 06:49:41

1

我之前构建的队列运行器运行多达75-100个独立的PHP进程,使用supervisor开始尽可能多的我想要的。由于它们共享如此多的通用代码,因此它们也由操作系统共享,而不是重复的。

运行几十个甚至更多,可能为某些类型的高优先级队列用于小型快速作业和一部分可以快速运行大型慢速作业的工作人员。

我写过关于这个问题的文章my tech blog, phpscaling.com