Почтовая очередь ColdFusion прекращает обработку

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

Мы нашли в Интернете предложения, в которых упоминаются файлы с нулевым байтом в папке, которую невозможно доставить, поэтому я создал задачу, которая удаляет их каждые три минуты. Однако остановка повторилась.

Я ищу предложения по диагностике и устранению этой проблемы.

  • Стандарт CF 8
  • Win2k3

Добавлен:

  • Нет ошибок в журнале почты на момент сбоя очереди
  • Мы не пытались запускать это без использования очереди из-за большого количества отправляемой почты.

Добавлено 2:

  • Похоже, проблема не в каком-либо из файлов в папке спулинга. Когда мы перезапускаем почтовую очередь, кажется, что все они обрабатываются правильно.

Добавлено 3:

  • Мы не используем вложения.

person Ben Doom    schedule 18.09.2008    source источник


Ответы (7)


Что мы в итоге сделали:

Я написал две запланированные задачи. Первый проверил, есть ли в папке очереди какие-либо сообщения старше n минут (в настоящее время установлено значение 30). Второй сбрасывает очередь каждую ночь при малом использовании.

К сожалению, мы так и не выяснили, почему очередь слетает с рельсов, но кажется, что это происходит только тогда, когда мы используем Exchange — другие почтовые серверы, которые мы пробовали, не имеют этой проблемы.

Редактировать: меня попросили опубликовать мой код, поэтому вот тот, который нужно перезапустить, когда будет найдена старая почта:

<cfdirectory action="list" directory="c:\coldfusion8\mail\spool\" name="spool" sort="datelastmodified">
<cfset restart = 0>
<cfif datediff('n', spool.datelastmodified, now()) gt 30>
    <cfset restart = 1>
</cfif>
<cfif restart>
    <cfset sFactory = CreateObject("java","coldfusion.server.ServiceFactory")>
    <cfset MailSpoolService = sFactory.mailSpoolService>
    <cfset MailSpoolService.stop()>
    <cfset MailSpoolService.start()>
</cfif>
person Ben Doom    schedule 09.02.2009
comment
Раньше у меня это случалось периодически, и как-то странно ‹. проблема, мы так и не определили причину... мы могли отправить 100 одинаковых писем, и 35-е задохнулось бы... удаление самого старого универсально исправило это... настройка процесса для мониторинга, который является прекрасным решением для тех причудливых незарегистрированных джрун икает. - person OhkaBaka; 25.10.2009
comment
Мы столкнулись с той же проблемой, но остановка и запуск MailSpoolService, как описано здесь, не влияет на проблему — все, что нам помогает, — это перезапустить Coldfusion. Есть ли у кого-нибудь другие предложения, которые мы могли бы попробовать, чтобы предотвратить перезапуск Coldfusion? - person Loftx; 08.04.2010
comment
@Loftx - Какой почтовый сервер вы используете? Мы столкнулись с этой проблемой только тогда, когда власть заставила нас использовать Exchange. Можно ли использовать небольшую систему ретрансляции SMTP? Бесплатная версия MailEnable отлично подходит для этой цели в нашей производственной среде. - person Ben Doom; 08.04.2010
comment
мы используем SMTP-сервер, поставляемый с IIS в Windows Server 2003. Сервер работал нормально в течение нескольких лет, а затем у нас возникла эта проблема, может быть, 4 раза за последние 6 месяцев или около того. Если хотите, я могу начать новый вопрос, а не продолжать этот. - person Loftx; 08.04.2010
comment
Я не против того, что вы комментируете здесь. Я был бы обеспокоен тем, что вы не увидите новых ответов. Похоже на другую проблему, наверное. Я видел 4 капли в день. - person Ben Doom; 09.04.2010
comment
Видел это сегодня в CF10. Код stop() и start() в этом ответе сработал. Судя по всему, эта ошибка и обходной путь будут жить вечно. - person ; 19.09.2013
comment
На самом деле, теперь это может привести к новой ошибке. CF10, W2K8. Мы используем это каждую ночь, потому что очередь иногда перестает обрабатываться. Теперь мы получаем дубликаты писем и оказывается, что сейчас работает 2 копии спулера. - person Steve; 30.09.2015

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

В любом случае, вы пробовали отключить буферизацию? Я видел, как почта отправляется со скоростью 500-600 сообщений за полсекунды, и это на дрянном сервере. При стандартном тайм-ауте страницы в 60 секунд вы могли бы отправить ~ 72 000 электронных писем, прежде чем страница истечет. Вы отправляете более 72 000 за раз?

Альтернативой, которую я использовал до того, как CFMail стал таким быстрым, было создание собственного спулера. Вместо того, чтобы отправлять электронные письма на лету, сохраните их в таблице базы данных. Затем настройте запланированное задание на отправку нескольких сотен сообщений и перепланируйте его на несколько минут позже, пока таблица не опустеет.

Мы запланировали выполнение задания один раз в день; и он может перепланировать себя, чтобы снова запуститься через пару минут, если таблица не пуста. Никогда не было проблем с этим.

person Adam Tuttle    schedule 26.09.2008

Вы пробовали просто обойти очередь? (В CF Admin, в настройках Mail Spool, снимите флажок «Spool почтовые сообщения для доставки».)

person Patrick McElhaney    schedule 18.09.2008

Иногда у меня возникает такая же проблема, и это не из-за файла с нулевым байтом, хотя эта проблема возникала в прошлом. Похоже, что один или два файла (самые старые в папке) не дадут очереди обработаться. Что я делаю, так это перемещаю все сообщения в папку для хранения, перезапускаю почтовую очередь и копирую сообщения обратно по частям в обратном хронологическом порядке, жду, пока они исчезнут, и перемещаю еще немного. Сообщения, задерживающие очередь, помещаются в отдельную папку для последующего изучения.

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

Я надеюсь, что помогает.

person Dan Roberts    schedule 20.09.2008

На самом деле у нас идентичная установка, 32-битная CF8 на Win2K3.

Мы использовали решение Бена около года назад, и оно помогло автоматически повторно помещать в очередь застрявшие электронные письма.

Однако недавно без какой-либо особой причины один из наших 7 веб-серверов решил попасть в это состояние при каждой попытке отправить письмо.

Возникло исключение при настройке параметров почтового сервера. Это исключение было вызвано: coldfusion.mail.MailSessionException: Возникло исключение при настройке параметров почтового сервера..

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

Еще один момент, который следует отметить, это то, что у нас был скрипт, который перезагружал машину посреди ночи из-за проблем с управлением памятью JRUN. Акт перезагрузки, казалось, инициировал проблему. Последующий перезапуск службы CF очистит ее, и машина будет в порядке, пока снова не перезагрузится.

Мы обнаружили, что проблема связана с антивирусным сканером McAfee, после его обновления для исключения каталога c:\ColdFusion8 проблема исчезла.

Надеюсь, это поможет.

person Tariq Ahmed    schedule 10.05.2012

В коде Бена Дума есть ошибка. В любом случае, спасибо, Бен, код отличный, и мы используем его сейчас на одном из наших серверов с установленным CF8, но: если каталог (\ spool) пуст, код дает сбой (ошибка: значение даты передано функции даты DateDiff не указано) или недействительным.) Это связано с тем, что если буфер объекта запроса пуст (spool.recordcount EQ 0), функция datediff выдает ошибку.

мы использовали это сейчас:

<!--- check if request for this page is local to prevent "webusers" to request this page over and over, only localhost (server) can get it e.g. by cf scheduled tasks--->
<cfsetting requesttimeout="30000">
<cfset who = CGI.SERVER_NAME>
<cfif find("localhost",who) LT 1>
    security restriction, access denied.
    <cfabort>
</cfif> 

<!--- get spool directory info --->
<cfdirectory action="list" directory="C:\JRun4\servers\cfusion\cfusion-ear\cfusion-war\WEB-INF\cfusion\Mail\Spool\" name="spool" sort="datelastmodified">
<cfset restart = 0>
<cfif spool.recordcount GT 0><!--- content there? --->
    <cfif datediff('n', spool.datelastmodified, now()) gt 120>
        <cfset restart = 1>
    </cfif>
</cfif>
<cfif restart><!--- restart --->
    <cfsavecontent variable="liste">
        <cfdump var="#list#">
    </cfsavecontent>    
    <!--- info --->
    <cfmail to="[email protected]" subject="cfmailqueue restarted by daemon" server="xxx" port="25"  from="xxxx" username="xxxx" password="xxx" replyto="xxxx">
    1/2 action: ...try to restart. Send another mail if succeeded!
    #now()#

    Mails:
    #liste#
    </cfmail>

    <cfset sFactory = CreateObject("java","coldfusion.server.ServiceFactory")>
    <cfset MailSpoolService = sFactory.mailSpoolService>
    <cfset MailSpoolService.stop()>
    <cfset MailSpoolService.start()>

    <!--- info --->
    <cfmail to="[email protected]" subject="cfmailqueue restarted by daemon" server="xxx" port="25"  from="xxxx" username="xxxx" password="xxx" replyto="xxxx">
    2/2 action: ...succeeded!
    #now()#
    </cfmail>

</cfif>
person user3576573    schedule 26.04.2014

Существует/была проблема с диспетчером очереди почты и сообщениями с вложениями в CFMX 8, которая была устранена с помощью одного из исправлений. По крайней мере, в версии 8.0.1 это должно было быть исправлено.

person ale    schedule 25.09.2008