He desarrollado un script PHP donde quiero enviar correos electrónicos automatizados a los usuarios. Implementé con éxito un trabajo cron con un script PHP que verifica una tabla de cola de correo PHP en busca de correos pendientes. El script funciona bien, pero el trabajo cron funciona de manera extraña: envía el correo a los usuarios, pero 3 o 4 a la vez. Quería enviar el correo solo una vez. ¿Cómo puedo conseguir esto?
Utilizo una condición para verificar si el correo se envía o no; si es 0, enviará el correo y actualizará el valor a 1. Esta condición funciona bien. Además, la base de datos relativa muestra solo una entrada por usuario, por lo que lógicamente solo se debe enviar un correo electrónico al usuario, pero en cambio, el trabajo cron envía 3 o 4 mismos correos electrónicos a la vez al usuario.
Configuré el trabajo cron cada 2 minutos. El comando es el siguiente:
2 * * * * wget (Http PATH to SERVER)/Utils/MailQueue.php
Respuesta1
Si cree que se pueden estar ejecutando varias instancias de su secuencia de comandos al mismo tiempo, utilice algún tipo de mecanismo de bloqueo. Pon tu wget en un script y envuélvelo en unrebañodominio
2 * * * * /usr/bin/flock -n /tmp/myAppLock.lck /path/to/your/wgetscript
Si el script MailQueue.php está en la misma máquina en la que estás ejecutando cron, entonces no necesitas wget
2 * * * * /usr/bin/flock -n /tmp/myAppLock.lck /usr/bin/php /path/to/Utils/MailQueue.php
Probablemente será una mejor solución ya que funcionará sin su servidor web.