繁体   English   中英

PHP脚本作为Cron作业发送电子邮件,防止多个进程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM