Doctor Snuggles: Linux-Server : Cronjob für PHP mit endloser Laufzeit

Hallo,

ich habe ein Problem, ich verschicke einen Newsletter über ein PHP Script das den Newsletter personalisiert und ihn dann verschickt. Leider sind nun so viele Empfänger das wir an die Laufzeitgrenze von PHP kommen. Unter Windows wäre es ganz einfach, ich würde den Cronjob über die DOS Konsole ausführen, hier gibt es keine Laufzeitbegrenzungen. Nur gibt es soetwas auch bei Linux Servern? Und wie würde so ein Aufruf aussehen?

  1. Aloha ;)

    ich habe ein Problem, ich verschicke einen Newsletter über ein PHP Script das den Newsletter personalisiert und ihn dann verschickt. Leider sind nun so viele Empfänger das wir an die Laufzeitgrenze von PHP kommen. Unter Windows wäre es ganz einfach, ich würde den Cronjob über die DOS Konsole ausführen, hier gibt es keine Laufzeitbegrenzungen. Nur gibt es soetwas auch bei Linux Servern? Und wie würde so ein Aufruf aussehen?

    Lustig, dass du gerade diesen Terminus benutzt. Zur Info: "Cronjob" bezieht sich auf das Tool "Cron", das diese ausführt - und Cron ist ein Unix-/Linuxtool, das in Windows nicht eingesetzt wird.

    Wenn du einen "richtigen" Linuxserver (also einen kompletten Server, nicht nur einen Webspace) zur Verfügung hast, kannst du Cron ganz normal verwenden (neben Wikipedia gibt es gute Anleitungen hierzu z.B. bei ubuntuusers.de). Wenn du, entgegen deiner ursprünglichen Aussage, nur einen Webspace zur Verfügung hast ist die Sache komplizierter, da du dann nicht auf das Cron-System des Servers zugreifen kannst. Dafür bieten sich dann stattdessen Webcron-Dienste (z.B. sowas - keine persönlichen Erfahrungen damit) an.

    Grüße,

    RIDER

    --
    Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar manchmal im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de) oder unter: # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[
  2. Tach!

    Leider sind nun so viele Empfänger das wir an die Laufzeitgrenze von PHP kommen.

    Du meinst, es überschreitet die unter max_execution_time konfigurierte Zeit?

    Unter Windows wäre es ganz einfach, ich würde den Cronjob über die DOS Konsole ausführen, hier gibt es keine Laufzeitbegrenzungen. Nur gibt es soetwas auch bei Linux Servern?

    Der Wert ist an der Kommandozeile standardmäßig auf 0 gesetzt und damit unwirksam.

    Und wie würde so ein Aufruf aussehen?

    php scriptname.php

    Üblicherweise müssen vollständige Pfade genommen werden, weil der PATH im cron in der Regel sehr minimal konfiguriert ist.

    dedlfix.

    1. Danke dedlfix, das war meine erste Umsetzung.

      Tach!

      Leider sind nun so viele Empfänger das wir an die Laufzeitgrenze von PHP kommen.

      Du meinst, es überschreitet die unter max_execution_time konfigurierte Zeit?

      Unter Windows wäre es ganz einfach, ich würde den Cronjob über die DOS Konsole ausführen, hier gibt es keine Laufzeitbegrenzungen. Nur gibt es soetwas auch bei Linux Servern?

      Der Wert ist an der Kommandozeile standardmäßig auf 0 gesetzt und damit unwirksam.

      Und wie würde so ein Aufruf aussehen?

      php scriptname.php

      Üblicherweise müssen vollständige Pfade genommen werden, weil der PATH im cron in der Regel sehr minimal konfiguriert ist.

      dedlfix.

  3. Hallo und guten Tag,

    ich habe ein Problem, ich verschicke einen Newsletter über ein PHP Script das den Newsletter personalisiert und ihn dann verschickt.

    Du benötigst keinen Cron-Job für deinen Newsletter. Du kannst auf einem vollwertigen Linux-Root-Server das PHP-Script mit unendlicher Laufzeit (mit Endlosschleife) in den Hintergrund stellen.

    Du solltest in das Script aber eine Stopp-Möglichkeit einbauen, z.B. indem Du es prüfen lässt, ob eine Kotrolldatei noch vorhanden ist. Wenn Du die dann löschst, sollte das Script anhalten.

    Außerdem solltest Du in der Datenbank einen Kontrolldatensatz schreiben (extra Tabelle?), in dem die Versendung des Newsletter mit der ID der Mailnamen-Tabelle, einem Datum und einer Zeit und einer Nummmer für den Newsletter eingetragen wird. Wenn Du nun das Script startest, übergibst Du ihm die Nummer des Newsletters und es holt per Negativ-Join aus der ersten Tabelle nur diejenigen Datensätze, die noch nicht verarbeitet wurden. Auf diese Weise kannst Du das Script immer anhalten und neu starten, ohne dass einige deiner Kunden plötzlich fünf gleiche Newsletter bekommen.

    Einen Cronjob benötigst Du nur, wenn das Script automatisch und/oder mehrfach starten soll. Das nenne ich dann aber Spamautomat!

    Grüße
    TS

    1. Danke, ich habe es jetzt über die Datenbank gelöst, so sind die Abbrüche jetzt vollkommen EGAL. Danke für die Inspiration.

      Doctor Snuggles

      [Admin-edit: Bitte keine Volltextzitate ;)]