Desenvolvi um script PHP onde desejo enviar e-mails automatizados aos usuários. Implementei com sucesso um cron job com um script PHP que verifica uma tabela de fila de correio PHP para e-mails pendentes. O script está funcionando bem, mas o cron job está funcionando de forma estranha: ele envia o email para os usuários, mas 3 ou 4 de cada vez. Eu queria enviar o e-mail apenas uma vez. Como posso conseguir isso?
Eu uso uma condição para verificar se o e-mail foi enviado ou não, se for 0 ele enviará o e-mail e atualizará o valor para 1. Esta condição está funcionando bem. Além disso, o banco de dados relativo mostra apenas uma entrada por usuário, portanto, logicamente, apenas um email deve ser enviado ao usuário, mas em vez disso, o cron job está enviando 3 ou 4 emails iguais por vez ao usuário.
Eu configurei o cron job para cada 2 minutos. O comando é o seguinte:
2 * * * * wget (Http PATH to SERVER)/Utils/MailQueue.php
Responder1
Se você acha que várias instâncias do seu script podem estar sendo executadas ao mesmo tempo, use alguma forma de mecanismo de bloqueio. Coloque seu wget em um script e envolva-o em umrebanhocomando
2 * * * * /usr/bin/flock -n /tmp/myAppLock.lck /path/to/your/wgetscript
Se o script MailQueue.php estiver na mesma máquina em que você está executando o cron, você não precisa do wget
2 * * * * /usr/bin/flock -n /tmp/myAppLock.lck /usr/bin/php /path/to/Utils/MailQueue.php
provavelmente será uma solução melhor, pois funcionará sem o seu servidor web.