Назад | Перейти на главную страницу

Работа Cron, отправляющая массовые электронные письма за раз

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

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

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

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

Если вы считаете, что несколько экземпляров вашего скрипта могут выполняться одновременно, используйте какой-либо механизм блокировки. Поместите ваш 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

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