Frage

Unser CF-Server gelegentlich stoppt die Verarbeitung Mail. Dies ist problematisch, da viele unserer Kunden davon abhängen.

Wir haben Vorschläge online, die Null-Byte-Dateien im Ordner unzustellbar erwähnen, so habe ich eine Aufgabe, die sie alle drei Minuten entfernt. Allerdings hat der Stillstand kommt wieder.

Ich suche Anregungen zur Diagnose und Behebung dieses Problems.

  • CF 8 Standard
  • Win2k3

hinzugefügt:

  • Es gibt keine Fehler in dem Mail-Protokoll zu dem Zeitpunkt der Warteschlange nicht
  • Wir haben nicht versucht zu laufen, ohne dass die Warteschlange verwendet wird, aufgrund der großen Menge an Mails, die wir senden

hinzugefügt 2:

  • Es scheint nicht ein Problem mit einem der Dateien in dem Spool-Ordner zu sein. Wenn wir die Mail-Warteschlange neu starten, scheinen sie alle korrekt zu verarbeiten.

hinzugefügt 3:

  • Wir verwenden keine Anhänge.
War es hilfreich?

Lösung

Was wir am Ende tun:

Ich schrieb zwei geplante Aufgaben. Die zuerst überprüft, um zu sehen, ob es irgendwelche Nachrichten in der Warteschlange Ordner waren älter als n minues (derzeit auf 30). Die zweite Zurücksetzen der Warteschlange jede Nacht bei geringer Nutzung.

Leider haben wir nie wirklich herausgefunden, warum würde die Warteschlange die Schienen abgehen, aber es scheint nur zu geschehen, wenn wir von Exchange verwenden -. Anderen Mail-Servern wir versucht haben, dieses Problem nicht haben

Edit: wurde ich gebeten, meinen Code zu schreiben, also hier ist die eine neu zu starten, wenn alte Post gefunden wird:

<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>

Andere Tipps

  

Wir haben versucht, dies zu führen, ohne dass die Warteschlange verwendet wird, aufgrund der großen Menge an Mails, die wir senden

Unabhängig davon, haben Sie versucht Spooling ausschalten? Ich habe Post bekommen mit einer Rate von 500 bis 600 Meldungen in einem halben Sekunde gesendet gesehen, und das ist auf Art eines crappy Servers. Mit der Standard-Timeout-Seite bei 60 Sekunden wären die ~ 72.000 E-Mails Sie, bevor die Seite würde eine Zeitüberschreitung senden könnten. Sind Sie mehr als 72.000 zu einem Zeitpunkt zu senden?

Eine Alternative, die ich vor cfmail verwendet wurde, war dies schnell war ein benutzerdefinierten Spooler zu bauen. Anstatt die E-Mails im Fluge zu senden, um sie zu einer Datenbanktabelle speichern. Dann Setup einen geplanten Auftrag, ein paar hundert der Nachrichten zu senden und sich später für ein paar Minuten neu planen, bis die Tabelle leer ist.

Wir geplant den Job einmal täglich zu laufen; und es kann sich wieder planen wieder in ein paar Minuten zu laufen, wenn die Tabelle nicht leer ist. Sie hatte nie ein Problem mit ihm.

Haben Sie versucht, nur die Warteschlange ganz zu umgehen? (In CF-Verwaltung unter Einstellungen Mail-Spool, deaktivieren "Spool-Mail-Nachrichten für die Lieferung.")

Ich habe das gleiche Problem manchmal, und es ist nicht auf eine Null-Byte-Datei obwohl das Problem Ernte in der Vergangenheit auf. Es scheint wie eine oder zwei Dateien (die ältesten im Ordner) wird die Warteschlange aus der Verarbeitung halten. Was ich tue, ist alle Nachrichten zu einem Halt Ordner verschieben, die Mail-Warteschlange neu starten und die Nachrichten wieder in einem Stück zu einer Zeit, in umgekehrter chronologischer Reihenfolge kopieren, warten, bis ihnen etwas mehr über zu gehen und sie bewegen. Die Nachrichten, die die Warteschlange halten wurden, werden in einem separaten Ordner abgelegt letztere werden untersucht.

Sie können sich wahrscheinlich tun dies programmatisch von die Warteschlange stoppen, die älteste Datei in einer anderen Ordner, dann href="https://stackoverflow.com/questions/94948/restarting-coldfusion-mail-queue"> starten und sehen, ob das Senden durch Prüfen Ordner-Datei zählt und Daten erfolgreich beginnt . Wenn die älteste Datei Entfernen nicht funktioniert, wiederholen Sie den vorherigen Prozess, bis alle der säumigen Mail-Dateien verschoben werden und das Senden erfolgreich fortgesetzt.

Ich hoffe, das hilft.

Wir haben tatsächlich eine identische Einrichtung, 32-Bit-CF8 auf Win2K3.

Wir beschäftigt Bens Lösung vor etwa einem Jahr, und dass bestimmte hat automatische Re-Warteschlange E-Mails geholfen, die stecken.

Jedoch vor kurzem ohne besonderen Grund eines unserer 7-Webserver beschlossen, in diesen Zustand mit jedem E-Mail-Versuch zu erhalten.

  

Eine Ausnahme ist aufgetreten, wenn Mail-Server-Parameter einrichten.   Diese Ausnahme wurde verursacht durch:   coldfusion.mail.MailSessionException:   Eine Ausnahme ist aufgetreten, wenn Mail-Server einrichten   Parameter ..

Jedes unserer Web-Server sind identische Klone voneinander, also warum es wurde nur zu, dass man geschieht, ist bizarr.

Ein weiterer Punkt zu beachten ist, dass wir ein Skript hatten, die die Maschine in der Mitte der Nacht wegen JRUN Speicher-Management-Themen neu starten. Der Akt des Neustart schien das Problem zu initiieren. Ein anschließender Neustart des CF-Dienstes würde dann deutlich, und die Maschine in Ordnung sein würde, bis er wieder neu gestartet wird.

Wir fanden, dass das Problem mit dem McAfee Virenscanner verwendet ist, nachdem es die Aktualisierung des c auszuschließen. \ ColdFusion8 Verzeichnis, das Problem ging weg

Ich hoffe, das hilft.

Es ist / war ein Problem mit den Mail-Spooler und Nachrichten mit Anhängen in CFMX 8, das mit einem der Hotfixes behoben. Version 8.0.1, zumindest sollte gehabt haben, dass festgelegt.

Es ist ein Fehler in Ben Doom-Code. Danke trotzdem ben, ist der Code groß, und wir nutzen es jetzt auf einem unseren Server mit CF8 installiert, aber: wenn Verzeichnis (\ Spool) leer ist, schlägt der Code (Fehler: Wert Date Datumsfunktion DatDiff bestanden ist nicht spezifiziert oder ungültig ist.) Das ist, weil, wenn die Abfrage Objekt Spule leer ist (spool.recordcount EQ 0), die datediff Funktion ein produziert Fehler.

Wir haben das jetzt:

<!--- 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="x@y.com" 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="x@y.com" subject="cfmailqueue restarted by daemon" server="xxx" port="25"  from="xxxx" username="xxxx" password="xxx" replyto="xxxx">
    2/2 action: ...succeeded!
    #now()#
    </cfmail>

</cfif>
scroll top