Simplenews - вешает крон. Как узнать где проблема

Главные вкладки

Аватар пользователя Valeratal Valeratal 24 марта 2010 в 9:19

Такой вопрос
Стала глючить рассылка Simplenews

Стоит, отправка по 100 писем по крону

в журнале /admin/reports/dblog есть запись, что 100 писем успешно ушло

Но, на этом, все останавливается. Крон зависает - так пишет система

По методу seaji (http://www.drupal.ru/node/9732) путем патчивания можно увидеть выполнения крона поэтапно
У меня такое

cron_runs 24.03.2010 - 08:16 дайджесты Гость
cron_runs 24.03.2010 - 08:16 privatemsg Гость
cron_runs 24.03.2010 - 08:16 googleanalytics Гость
cron_runs 24.03.2010 - 08:16 date_timezone Гость
cron_runs 24.03.2010 - 08:16 captcha Гость
cron_runs 24.03.2010 - 08:16 система Гость
cron_runs 24.03.2010 - 08:16 статистика Гость
cron_runs 24.03.2010 - 08:16 ping Гость
cron_runs 24.03.2010 - 08:16 материал Гость
cron_runs 24.03.2010 - 08:16 фильтр Гость
cron_runs 24.03.2010 - 08:16 dblog Гость

то есть, первой идет рассылка, затем все остальное

однако, рассылка не отправляется, в таблице (где очередь рассылки) куча адресов

Я так понимаю, где то в Simplenews происходит ошибка, но как понять где?

p.s. Проблемы с Simplenews особенно неприятны, так как вызывают отправку кучи одинаковых писем пользователям

Комментарии

Аватар пользователя gorr gorr 24 марта 2010 в 10:24

На одном из проектов стоит simplenews и рассылает по 200 писем за крон каждые несколько минут, потому как подписчиков более 30тыс, все ок. Версия модуля:
// $Id: simplenews.module,v 1.76.2.129 2009/03/09 07:45:19 sutharsan Exp $
Если версия та же, что и у Вас, то что-то с настройками сервера, а письма вообще отправляются, при активации регистрации, с формы контактов, уведомления о новых комментах, надо проверить.
Некоторые сервера (так было у меня - тоже не отправлялись письма сначала, пришлось патчить модуль) не хотят принимать в заголовке from логин пользователя в угловых скобках, а модуль их делает вдобавок к почтовому ящику отправителя(или получателя, уж не помню), может быть в этом дело, проверьте.
Кстати, в следующую версию модуля войдет мой патчик, благодаря которому при запуске по крону рассылки(какая-то нода) будет делаться всего один node_load() на один запуск крон, а сейчас делается при отправке 100 писем 100 раз)), пока изменения в дев версии.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 24 марта 2010 в 10:26

"gorr" wrote:
всего один node_load() на один запуск крон, а сейчас делается при отправке 100 писем 100 раз)), пока изменения в дев версии.

Ну сама загрузка ноды по факту происходит один раз, в остальные разы нода дёргается из кеша

Аватар пользователя Valeratal Valeratal 24 марта 2010 в 10:36

письма вообще отправляются, тестировал по всякому (ибо валидация у-mail необходимое условие регистрации)

Одни раз, поймал зависание. у пользователя было мыло "tm"

именно так. Каким образом у него получилось зарегится не знаю (может пока отключал модуль profile)

Что сейчас происходит не могу понять, ибо прошлая рассылка зависла на 2000 - каком то адресе
эта, где то на 147-м (что тоже странно, так как по логам ушло 100 писем за один раз, и больше ничего не было, 147 пишет сам модуль рассылки (admin/content/simplenews/sent))

Проверю про угловые скобки и версию модуля

Аватар пользователя seaji seaji 24 марта 2010 в 12:31

Я, как автор http://www.drupal.ru/node/9732 не могу не возмутиться.
Я конечно очень уважаю Влада Савицкого.
Но про крон писал таки я.

Во вторых, Вы ошибаетесь. Рассылки идет именно последней. В журнале watchdog события следуют от более новых к более старым (вниз). Значит именно на рассылке и тормозит.

Можно получить представление о том, какие модули не отрабатываются в кроне путем отключения рассылки и запуска крона. Потом просто посмотрите какие модули будут стоять после privatemsg (по направлению вверх).

Еще попробуйте уменьшить количество писем, отправляемых за раз, но дергать крон почаще.
Тут нужно понимать, что сам PHP не отправляет письма, а ставит их в очередь для программы рассылки. Поэтому PHP не может ничего знать о том, отправлено письмо или нет. То, что PHP говорит "письмо отправлено" на самом деле обозначает, что оно поставлено в очередь на рассылку.
Далее, если очередь будет слишком большой и программа рассылки исчерпает либо отведенную память либо ресурсы процессора, то она будет просто убита. В моей практике встречались такие случаи.

Аватар пользователя Valeratal Valeratal 24 марта 2010 в 13:12

спасибо за комментарии
авторство поправил

конечно, отключив рассылку я пойму что крон работает нормально
ну, собственно я не сомневался

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

ставить по 50 штук, этак до второго пришествия рассылать будет (крон запускается каждый 15 минут, подписчиков более 10к)
Буду хостера поспрашивать. Раз затыки где то в ОС

Аватар пользователя seaji seaji 24 марта 2010 в 14:10

"Valeratal" wrote:
ну у меня раньше было и 500 за раз, ничего, работало

Почти наверняка только 10-20% из этих писем реально уходили.

Это достаточно сложно протестировать.
Я делал систему, которая встраивает картинку в письмо и при просмотре этой картинки письмо помечается как прочитанное. Но это то же самое как предсказывать погоду на Марсе.
Далеко не все почтовые клиенты отображают картинки поумолчанию. Гугл, например, не отображает.

Аватар пользователя Valeratal Valeratal 24 марта 2010 в 14:33

хм, у меня такая статистика, по модулям симпл ньюс аналитикс
и статистикс, переходов было где то 8%

ужасная цифра. Неужели действительно проблема в том, что не все письма уходили

Аватар пользователя seaji seaji 24 марта 2010 в 14:38

"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
То есть реально для больших баз simplenews непригоден?

Да нет, simplenews тут не причем. Это чисто физические ограничения сервера.
Тут есть два момента.
1. Подберите количество писем отправляемое за раз. Чтоб сервер мог их пережевать.
2. Учитывайте траффик. Держите объем каждого письма как можно меньше. Допустим 1 письмо - 100 кб, всего 10 тыс. писем. Умножаем 100 * 10000 = 1000000 кб т.е. в районе 1 Гигабайта.

+ У некоторый провайдеров есть ограничения на количество писем, отправляемых в час.

Аватар пользователя Valeratal Valeratal 26 марта 2010 в 11:40

в общем, та рассылка опят зависла
и висит

в логах нашел это

[Fri Mar 26 11:01:48 2010] [error] PHP Warning: MySQL server has gone away\nquery: INSERT INTO watchdog\n (uid, type, message, variables, severity, link, location, referer, hostname, timestamp)\n VALUES\n (0, 'php', '%message in %file on line %line.', 'a:4:{s:6:\\"%error\\";s:12:\\"user warning\\";s:8:\\"%message\\";s:205:\\"MySQL server has gone away\\nquery: SELECT dst FROM url_alias WHERE src = 'newsletter/confirm/remove/b09cc96f030t7058' AND language IN('ru', '') ORDER BY language DESC, pid DESC\\";s:5:\\"%file\\";s:61:\\"/путь/www.hr-portal.ru/includes/path.inc\\";s:5:\\"%line\\";i:69;}', 3, '', 'http://www.hr-portal.ru/cron.php', '', '213.221.5.200', 1269590508) in /путь/www.hr-portal.ru/includes/database.mysql.inc on line 128

чтобы это значило?

Аватар пользователя Valeratal Valeratal 26 марта 2010 в 11:55

ну да, что умер я понимаю (напевая Love Is Gone), причем именно тогда, когда надо было работать симплньюсь

но вот почему

Аватар пользователя Valeratal Valeratal 5 апреля 2010 в 17:01

обнаружил странное совпадение

несколько раз подряд, рассылка зависает на определенном количестве отправленных писем

Подскажите, где копать? Может какая таблица "побилась" ?

я знаю только майл-спул (там адреса, по которым должна уйти рассылка, но еще не ушла)
может есть еще где поискать

P.S. Количество отправляемых писем уменьшил до 20 (что совсем ерунда, уходит по логам меньше чем за 2 секунды)

Аватар пользователя Valeratal Valeratal 5 апреля 2010 в 20:59

обнаружил странную штуку

simplenews_subscriptions таблица содержит примерно в 2 раза больше записей, чем у меня всего подписчиков

никто ни в курсе, за что она отвечает?

Аватар пользователя Valeratal Valeratal 10 апреля 2010 в 23:12

такое подоздрение
что симплньюс спотыкается об адреса вида
слово.слово@домен.ru

то есть , дополнительные точки в адресе

подскажите, такое может быть?

Аватар пользователя seaji seaji 11 апреля 2010 в 12:30

"Valeratal" wrote:
слово.слово@домен.ru

Сложно сказать, но вполне возможно. Нужно проверять.
Проще всего хакнуть модуль в том месте где идет отправка и записывать в лог адреса.
Последний адрес в логе и будет проблемным.

Аватар пользователя AndreyY AndreyY 22 ноября 2010 в 0:55

Споткнулся о такую же ситуацию, как и у вас. Simplenews вешает крон где попало. Потом может опять пойти. Сменил 1.x на 2.х - то же самое.
Удалось ли Вам найти решение?

Аватар пользователя AndreyY AndreyY 22 ноября 2010 в 15:59

Mirocow wrote:
cron повесить невозможно
И тем более кривым скриптом

«Время выполнения регулярных процедур превысило час, скорее всего это зависание.»
если это не зависание, то что же ?

При попытке вручную запустить крон ошибка "Попытка запуска процедур cron в то время, как они выполняются".

Дальше, попытался ограничить число отсылаемых писем по крон с 20 до 10. И пошло! Т.е. 10 писем всегда отсылаются успешно и крон завершается хорошо.
Где копать ? ;-(

Аватар пользователя Mirocow Mirocow 22 ноября 2010 в 23:15

"AndreyY" wrote:

Да но это не значит что демон крон вешается. Насколько я понял подвисает всего одна задача. А в скрипте присутствует определение стадии ее выполнения. Естественно если скрипт не рассчитан на много поточность, то срабатывает защита и остальные копии не запускаются.