[英]PHP Script as Cron Job to Send Email, Prevent Multiple Processes
我正在开发一个提醒应用程序,用户可以通过选择提醒的时间和日期向自己发送电子邮件。
因此,我将使用cron作业发送将在每分钟后运行的电子邮件,并将检查是否有待发送的电子邮件。
现在,我的问题是,如果在任何给定时间我有50-100个电子邮件发送然后我认为发送电子邮件可能需要超过1分钟,所以另一个cron作业将开始运行相同的脚本。 那会有什么问题吗? 运行cron作业每分钟服务器资源消耗? 如果是,那么实现相同功能的其他选项是什么。
请建议!!
谢谢
使用锁定文件策略...在启动新进程时创建锁定文件,并且每个后续进程应在启动之前检查该锁定文件是否存在。 如果锁定文件存在,那么您知道先前的进程仍在运行。
但是,您需要确保现有锁定文件仍然有效 。 可能是在不删除锁定文件的情况下退出创建锁定文件的进程。 将创建锁文件的进程的进程ID(PID)写入锁文件。 找到现有锁文件的后续进程应从文件中读取PID,然后确保该进程仍在运行。
此外,限制每个进程发送的消息数是个好主意。 如果将其保持开放状态,系统管理员可能会遇到与长时间运行进程相关的问题。 :)
好吧,无论何时我通过PHP发送电子邮件,我都是通过mailQ包装器完成的,它不会立即发送电子邮件,而是将其放在队列中发送(并通过自己的独立脚本发送)。 如果采用相同的方法,您可以简单地将电子邮件添加到队列中(带有消息,收件人等的SQL表以及表明是否已发送的标志)。
然后你仍然可以每分钟运行一次脚本,然后有一个电子邮件脚本(查找邮件表以查看是否有需要发送的待处理消息)作为一个独立的cron作业运行 - 因此工作负载是完全的因作业应并行运行而分开。
我可以100%放心地保证,只要您的代码合理,每分钟运行一份工作永远不应成为问题。 我已经在我的CMS中使用这种方法多年来平衡更新不是高优先级的东西之间的负载,并且只会减慢客户端的浏览体验。
自从使用这种方法后,我从未遇到过性能,负载或滞后问题,并且事情继续迅速得到解决。
我同意AJ的意见,因为在一批中可以发送多少封邮件是很重要的。 使用排队系统是理想的,因为它一次只发送X挂起,并且它们仍然在队列中等待。
如果你在Linux上,你可以使用它来设置一个定期执行的服务,该服务一直持续到完成然后等待一分钟等。
http://code.google.com/p/atomservice/
我一直用它来做这样的事情。 您甚至可以设置每次执行发送的x封电子邮件的限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.