Примечание: этот пост является частью серии, написанной на phpList3. Чтобы прочитать другой пост, посмотрите Настройка обработки отказов в phpList.

В этом посте я описал типичную проблему, с которой люди сталкиваются при обработке очередей или отказов в phpList.

Ошибки и проблемы, возникающие при обработке отказов / очереди

При обработке отказов, если происходит одно из следующих событий:

  1. Если вы используете браузер вручную, в конце отображается пустое текстовое поле
  2. При использовании командной строки ничего не отображается, а прокрутка находится внизу экрана.

Это означает, что произошла ошибка, выполните следующие действия, чтобы исправить ее:

  1. Откройте базу данных phpList
  2. Откройте таблицу `phplist_sendprocess`
  3. Снимите флаг активности, если значением страницы является `processbounces` или` processqueue`, если вы планируете обрабатывать отказов или очереди соответственно.
  4. В качестве альтернативы используйте следующий запрос MySQL:
  • Для отказов:
UPDATE `phplist_sendprocess` SET `alive` = 0 WHERE `phplist_sendprocess`.`page` = 'processbounces'
  • Для очередей:
UPDATE `phplist_sendprocess` SET `alive` = 0 WHERE `phplist_sendprocess`.`page` = 'processqueue'

Причина, по которой это делается, заключается в том, что когда phpList начинает обработку отказов, он устанавливает переменную флага, указывающую, что он начал обработку отказов, чтобы гарантировать, что ни один другой процесс, если он запущен в то же время, также не выполнит ту же операцию обработки отказов. Второй будет просто катапультироваться. По завершении он автоматически сбрасывает флаг, позволяя запускать другой процесс.
Когда он останавливается в промежутке, ему не удается сбросить флаг, тем самым переходя в состояние Deadlock, в котором ни один процесс не выполняется, и каждый новый процесс, порожденный phpList, считает, что процесс выполняется.