Примечание: этот пост является частью серии, написанной на phpList3. Чтобы прочитать другой пост, посмотрите Настройка обработки отказов в phpList.
В этом посте я описал типичную проблему, с которой люди сталкиваются при обработке очередей или отказов в phpList.
Ошибки и проблемы, возникающие при обработке отказов / очереди
При обработке отказов, если происходит одно из следующих событий:
- Если вы используете браузер вручную, в конце отображается пустое текстовое поле
- При использовании командной строки ничего не отображается, а прокрутка находится внизу экрана.
Это означает, что произошла ошибка, выполните следующие действия, чтобы исправить ее:
- Откройте базу данных phpList
- Откройте таблицу `phplist_sendprocess`
- Снимите флаг активности, если значением страницы является `processbounces` или` processqueue`, если вы планируете обрабатывать отказов или очереди соответственно.
- В качестве альтернативы используйте следующий запрос 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, считает, что процесс выполняется.