Hallo
Ich hoffe, dass mir hier jemand weiterhelfen kann und schildere erstmal meine Situation um mein "Vorhaben" klarer darzustellen...
Alles hat angefangen mit einer kleinen 2-Mann-Firma, die komplett ohne Internet agierte (Kunden nur in der Region, Briefkontakt, Telefon und gut). Irgendwann kam einer auf die Idee: Internet = mehr Kunden.
Und schon war der erste Auftritt fertig - nur als Präsentation, Anmeldungen kamen per Email - weiterhin alles per Briefkontakt
Wie man sich vorstellen kann, wenn etwas läuft, dann wird das irgendwann nicht mehr machbar. Also kamen wir auf die Idee: Unsere Webseite könnte viel übernehmen:
User in Datenbank gespeichert, Abrechnungen usw. erscheinen direkt auf der Webseite - die User erhalten einen Member bereich mit allen Informationen - Soweit so gut.
In der Anfangszeit wurden alle Berechnungen von den Internetseiten selbst gemacht. D.h. wenn der erste im Monat auf die Seite kam, musste er etwas länger warten, bis die seite geladen wurde. Aber auch das wird mit der Zeit zu viel (vor allem nervig und auf den meisten Servern sind PHP-Scripte ja auch zeitlich begrenzt - in unserem Fall auf 30 Sekunden -> ab 2000 Kunden war das zu wenig)
Mittlerweile sind wir bei weit über 5000 angelangt und es gab natürlich auch schon wieder Änderungen.
CronJobs waren die nächst bessere Wahl. Aber auch hier kam ich irgendwann an die grenze für die PHP-Skript-Laufzeit...
Um dieses Problem wieder in den griff zu kriegen wurde der aktuelle Zustand entwickelt. Das sieht dann folgendermaßen aus:
Ein Script wird jeden Tag per CronJob gestartet - Je nach Tag hat es verschiedene Aufgaben (von einfachen Account-Aktivierungen am anfang des Monats über Email-Versand -Zahlungsaufforderungen- in der Mitte, bis hin zur Abrechnungserstellung am Ende des Monats)
Da aber je nach aufgabe (z.B. Emailversand) die Laufzeit weit über die 30 Sekunden rausgehen, musste ich dieses Script so programmieren dass es sich merkt, wie weit es kam und alles immer nur häppchenweise erledigt - z.B. 100 Emails, dann nächster Durchgang... (Die Emails und die Abrechnung am ende des Monats waren in der Tat die größten Probleme - im Internet muss man viele User an eine Zahlung erinnern, und dank vieler User gibts auch viele Abrechnungen)
Jedenfalls ging ich irgendwann so weit, dass ich für die Mails und Rechnungen eigenen PHP-Scripte schrieb, die alle 5 Minuten aufgerufen werden, in die Datenbank schauen, ob was zu tun ist, 100 Stück erledigen und wieder aufhören. Die Einträge selbst werden durch den ursprünglichen Cronjob erledigt.
Hört sich kompliziert an, und ist auch so^^
Und zu guter letzt, lasse ich den eigentlichen Cronjob am Tag 5-6 mal aufrufen, da wir anfangs große Probleme mit der Erreichbarkeit unseres Servers hatten und man nie wusste, ob der Job jetzt erledigt war, oder ob er gerade off war (ich speichere in einem kleinen Text-file, ob der Cronjob aufgerufen wurde oder nicht und überprüfe dieses bei jeder Ausführung)
Aber mir ist schon die ganze Zeit bei diesem Aufbau schwummrig, und wenn es auch momentan läuft, habe ich immer das Gefühl dass das ganze Gebilde instabil ist, und dass nur ein kleiner Datenhauch reicht um es von seinen Aufgaben abzuhalten...
Nun hatte ich die Idee, dass man einen Deamon schreiben könnte, der rund um die Uhr im hintergrund läuft und die ein oder andere Aufgabe übernehmen kann. Z.B. den Mailversand oder auch das erstellen der Abrechnungen und vielleicht auch den ein oder anderen sonstigen Job, der von diesem komplizierten Cronjob aufgerufen wird...
Mein Idealziel wäre, dass alle zeitintensiveren Aufgaben von einem oder mehreren Deamons durchgeführt werden.
Mit PHP kann ich mir sowas noch ungefähr vorstellen - soweit ich das verstanden habe, wäre es ein normales Script, dass mit sleep einfach wartet und lediglich ausführbar gemacht wurde (und natürlich die übliche anfangszeile #!/pfadzuphp) erhält...
Die Frage ist: wird dieses Script dann nicht auch nach 30 Sekunden abgebrochen wie alle anderen über den Webserver
(Ich will diese Maximal-Laufzeit nicht unbedingt ausschalten, da sie meiner Meinung nach schon einen gewissen Sinn hat, auch bei einem komplett unter meiner Fuchtel stehendem Webserver)
Oder gibt es gute alternativen? Einen Deamon könnte man ja auch mit Perl/Python/C++ schreiben. Alle Sprachen kann ich bedienen, aber habe ich noch nie was im Zusammenhang mit Webseiten zu tun gehabt - d.h. ich habe z.B. kein Plan, wie ich an die MySQL-Datenbank rankommen würde...
Hat jemand von Euch eine Idee, wo ich Informationen über das Schreiben von Deamons (PHP, Perl, Python, C++) finden könnte?
Oder besser noch: eigene Erfahrungen zu dem Thema?
Also dazu gehört dann natürlich auch: Was muss man beachten usw... ich denke wenn ich ein einfaches Programm schreiben würde, dann hätte das wieder irgendwo irgendwelche Haken, die dann die Funktion einschränken... oder was falsch machen...
Und dann zu guter letzt: Ich mache mir auch Gedanken was wäre wenn dieser Deamon mal abstürzt, sich beendet, abgeschossen wird, warum auch immer... Kann man das irgendwie überwachen und ihn neu starten? (dabei dachte ich an ein einfaches bash-script, dass per "ps aux" schaut ob der deamon noch läuft und wenn nicht diesen neu startet)
Ich stoße so langsam in Regionen der Programmierung vor, in die ich ursprünglich eigentlich nie wollte, deshalb wäre ich sehr dankbar, wenn mir da jemand einen sinnvollen Schubs in die richtige Richtung geben könnte...
Grüße
DM
Ich hoffe, dass mir hier jemand weiterhelfen kann und schildere erstmal meine Situation um mein "Vorhaben" klarer darzustellen...
Alles hat angefangen mit einer kleinen 2-Mann-Firma, die komplett ohne Internet agierte (Kunden nur in der Region, Briefkontakt, Telefon und gut). Irgendwann kam einer auf die Idee: Internet = mehr Kunden.
Und schon war der erste Auftritt fertig - nur als Präsentation, Anmeldungen kamen per Email - weiterhin alles per Briefkontakt
Wie man sich vorstellen kann, wenn etwas läuft, dann wird das irgendwann nicht mehr machbar. Also kamen wir auf die Idee: Unsere Webseite könnte viel übernehmen:
User in Datenbank gespeichert, Abrechnungen usw. erscheinen direkt auf der Webseite - die User erhalten einen Member bereich mit allen Informationen - Soweit so gut.
In der Anfangszeit wurden alle Berechnungen von den Internetseiten selbst gemacht. D.h. wenn der erste im Monat auf die Seite kam, musste er etwas länger warten, bis die seite geladen wurde. Aber auch das wird mit der Zeit zu viel (vor allem nervig und auf den meisten Servern sind PHP-Scripte ja auch zeitlich begrenzt - in unserem Fall auf 30 Sekunden -> ab 2000 Kunden war das zu wenig)
Mittlerweile sind wir bei weit über 5000 angelangt und es gab natürlich auch schon wieder Änderungen.
CronJobs waren die nächst bessere Wahl. Aber auch hier kam ich irgendwann an die grenze für die PHP-Skript-Laufzeit...
Um dieses Problem wieder in den griff zu kriegen wurde der aktuelle Zustand entwickelt. Das sieht dann folgendermaßen aus:
Ein Script wird jeden Tag per CronJob gestartet - Je nach Tag hat es verschiedene Aufgaben (von einfachen Account-Aktivierungen am anfang des Monats über Email-Versand -Zahlungsaufforderungen- in der Mitte, bis hin zur Abrechnungserstellung am Ende des Monats)
Da aber je nach aufgabe (z.B. Emailversand) die Laufzeit weit über die 30 Sekunden rausgehen, musste ich dieses Script so programmieren dass es sich merkt, wie weit es kam und alles immer nur häppchenweise erledigt - z.B. 100 Emails, dann nächster Durchgang... (Die Emails und die Abrechnung am ende des Monats waren in der Tat die größten Probleme - im Internet muss man viele User an eine Zahlung erinnern, und dank vieler User gibts auch viele Abrechnungen)
Jedenfalls ging ich irgendwann so weit, dass ich für die Mails und Rechnungen eigenen PHP-Scripte schrieb, die alle 5 Minuten aufgerufen werden, in die Datenbank schauen, ob was zu tun ist, 100 Stück erledigen und wieder aufhören. Die Einträge selbst werden durch den ursprünglichen Cronjob erledigt.
Hört sich kompliziert an, und ist auch so^^
Und zu guter letzt, lasse ich den eigentlichen Cronjob am Tag 5-6 mal aufrufen, da wir anfangs große Probleme mit der Erreichbarkeit unseres Servers hatten und man nie wusste, ob der Job jetzt erledigt war, oder ob er gerade off war (ich speichere in einem kleinen Text-file, ob der Cronjob aufgerufen wurde oder nicht und überprüfe dieses bei jeder Ausführung)
Aber mir ist schon die ganze Zeit bei diesem Aufbau schwummrig, und wenn es auch momentan läuft, habe ich immer das Gefühl dass das ganze Gebilde instabil ist, und dass nur ein kleiner Datenhauch reicht um es von seinen Aufgaben abzuhalten...
Nun hatte ich die Idee, dass man einen Deamon schreiben könnte, der rund um die Uhr im hintergrund läuft und die ein oder andere Aufgabe übernehmen kann. Z.B. den Mailversand oder auch das erstellen der Abrechnungen und vielleicht auch den ein oder anderen sonstigen Job, der von diesem komplizierten Cronjob aufgerufen wird...
Mein Idealziel wäre, dass alle zeitintensiveren Aufgaben von einem oder mehreren Deamons durchgeführt werden.
Mit PHP kann ich mir sowas noch ungefähr vorstellen - soweit ich das verstanden habe, wäre es ein normales Script, dass mit sleep einfach wartet und lediglich ausführbar gemacht wurde (und natürlich die übliche anfangszeile #!/pfadzuphp) erhält...
Die Frage ist: wird dieses Script dann nicht auch nach 30 Sekunden abgebrochen wie alle anderen über den Webserver
(Ich will diese Maximal-Laufzeit nicht unbedingt ausschalten, da sie meiner Meinung nach schon einen gewissen Sinn hat, auch bei einem komplett unter meiner Fuchtel stehendem Webserver)
Oder gibt es gute alternativen? Einen Deamon könnte man ja auch mit Perl/Python/C++ schreiben. Alle Sprachen kann ich bedienen, aber habe ich noch nie was im Zusammenhang mit Webseiten zu tun gehabt - d.h. ich habe z.B. kein Plan, wie ich an die MySQL-Datenbank rankommen würde...
Hat jemand von Euch eine Idee, wo ich Informationen über das Schreiben von Deamons (PHP, Perl, Python, C++) finden könnte?
Oder besser noch: eigene Erfahrungen zu dem Thema?
Also dazu gehört dann natürlich auch: Was muss man beachten usw... ich denke wenn ich ein einfaches Programm schreiben würde, dann hätte das wieder irgendwo irgendwelche Haken, die dann die Funktion einschränken... oder was falsch machen...
Und dann zu guter letzt: Ich mache mir auch Gedanken was wäre wenn dieser Deamon mal abstürzt, sich beendet, abgeschossen wird, warum auch immer... Kann man das irgendwie überwachen und ihn neu starten? (dabei dachte ich an ein einfaches bash-script, dass per "ps aux" schaut ob der deamon noch läuft und wenn nicht diesen neu startet)
Ich stoße so langsam in Regionen der Programmierung vor, in die ich ursprünglich eigentlich nie wollte, deshalb wäre ich sehr dankbar, wenn mir da jemand einen sinnvollen Schubs in die richtige Richtung geben könnte...
Grüße
DM
Comment