Задание Cron для отправки большого количества писем за раз

Задание Cron для отправки большого количества писем за раз

Я разработал PHP-скрипт, в котором я хочу отправлять автоматизированные письма пользователям. Я успешно реализовал задание cron с PHP-скриптом, который проверяет таблицу очереди почты PHP на предмет ожидающих писем. Скрипт работает нормально, но задание cron работает странно: оно отправляет почту пользователям, но по 3 или 4 за раз. Я хотел отправить почту только один раз. Как мне этого добиться?

Я использую условие для проверки того, отправлено ли письмо или нет, если оно равно 0, то оно отправит письмо и обновит значение до 1. Это условие работает нормально. Кроме того, относительная база данных показывает только одну запись на пользователя, поэтому логически предполагается, что только одно письмо должно быть отправлено пользователю, но вместо этого задание cron отправляет пользователю 3 или 4 одинаковых письма за раз.

Я установил cron-задание на каждые 2 минуты. Команда следующая:

2 * * * * wget (Http PATH to SERVER)/Utils/MailQueue.php

решение1

Если вы считаете, что несколько экземпляров вашего скрипта могут работать одновременно, то используйте какой-либо механизм блокировки. Поместите ваш wget в скрипт и оберните его встадокоманда

2 * * * * /usr/bin/flock -n /tmp/myAppLock.lck /path/to/your/wgetscript 

Если скрипт MailQueue.php находится на той же машине, на которой вы запускаете cron, то вам не нужен wget.

2 * * * * /usr/bin/flock -n /tmp/myAppLock.lck /usr/bin/php /path/to/Utils/MailQueue.php

вероятно, будет лучшим решением, поскольку оно будет работать без вашего веб-сервера.

Связанный контент