PDA

Vollstndige Version anzeigen : pseudo-cronjob


feuervogel
02-05-2005, 11:40
hallo!

ich schreibe grade an einer applikation, bei der ich so etwas wie cronjobs einsetzen mchte. da aber jeder diese applikation bei sich einsetzen knnen sollte, ohne gleich root-zugriff haben zu mssen, wollte ich die so etwas hnliches wie cronjobs machen. es geht dabei konkret um das backupen der datenbank und das verschicken der bla.sql via email. wie wrdet ihr das realisieren?

meine ideen waren:

- bei jedem xyz. seitenbesuch. problem: jedes mal text-datei auslesen und wieder schreiben dauert mir zu lang.
- bei jedem xyz. datenbankeintrag. wre nicht so schlimm, da nur bei jedem update/insert mal kurz nach gefragt werden wrde, wie viele es denn nun gibt. sollte ich dazu ein kleines backup-tool schreiben (da gabs doch schon sehr oft nachfragen hier im forum?) oder das ganze direkt mit exec und mysql machen?
- weitere ideen?

xabbuh
02-05-2005, 12:00
sollte ich dazu ein kleines backup-tool schreiben (da gabs doch schon sehr oft nachfragen hier im forum?) oder das ganze direkt mit exec und mysql machen?
Wie gro ist denn die Warscheinlichkeit, dass du exec() etc. benutzen darfst, wenn du keinen Rootzugriff hast?
Da wre es dann meiner Meinung nach sinnvoller, gleich darauf zu verzichten und lieber ein Backupscript zu schreiben.

|Coding
02-05-2005, 12:05
Wie findest Du einen zeitlichen conrjob-fake?

Bei jedem Besucher die aktuelle Zeit mit einer gespeicherten Zeit pruefen, ist die Differenz beider Zeiten groeer oder gleich der gewuenschten Differenz, so kannst Du das Backup Tool starten.

Ein Gedanke geht mir jetzt aber durch den Kopf...

Wie willst Du es schaffen, dass das Script auch abgearbeitet wird. Wenn Du es ueber die Besucher steuern bzw. laufen laesst, dann kannst Du nicht davon ausgehen, dass das Backup auch vollstaendig absoviert wird. Ich denke da an so sachen wie, Browser schlieen...

dachris
02-05-2005, 12:12
Das ginge damit http://www.php-homepage.de/manual/function.ignore-user-abort.php

|Coding
02-05-2005, 12:21
ooopppsss... :-)

dachris
02-05-2005, 12:27
Das Hauptproblem beim gefakten CronJob ist jedoch das du es einem User aushalst das er evtl. warten muss.......

Biete also in deinem Programm Alternativen an....

Also Untersttzung von echtem Cron
Unterstrtzung eines gefakten Cron
Manuelle Abarbeitung.....

Dann kann der User deines Programmes selber edntscheiden was das beste ist....

PS: Ein Backup wrde ich nicht ber mail verschicken, sondern eher auf dem Server lagern und dann knnen die verschiedenen Backupstnde abgerufen werden......

feuervogel
02-05-2005, 14:17
PS: Ein Backup wrde ich nicht ber mail verschicken, sondern eher auf dem Server lagern und dann knnen die verschiedenen Backupstnde abgerufen werden......
@dachris: ich will das backup ja haben, weil der server verrecken knnte, also wre ein backup auf dem server in meinen augen etwas deplaziert...natrlich versieht man so eine datei mit datum - zur spteren sortierung usw.

@alle: wow, mit so vielen antworten hab ich nicht gerechnet...werde mir das ganze heute whrend einer vorlesung noch mal durch den kopf gehen lassen...

dachris
02-05-2005, 14:25
Nuja wenn der MySQL Server verreckt hast du die Daten auf deinem Webserver...

Wenn der Webserver verreckt hast du die Daten auf dem MySQL Server.....

Anders schauts natrlich aus wenn alles der gleiche Server ist.....(hardwaremssig) aber wer tut den sowas :-)

Vor allem wird die Datenbank ja normalerweise mal recht gross und das dann immer per mail na ich weiss ja nicht.....

Ausserdem haben die meisten Hostinganbieter ein Backup.....

Ach ja nur zur Anregung....wie gesagt gib dem User mglichst viele Alternativen....hier ist noch eine

Wenn ein Backup ausgefhrt wurde schick dem User ne Mail das er sich das neue Backup jetzt runterladen kann (also mit psychologischer Kriegsfhrung den User zum Backup zwingen :-)

|Coding
02-05-2005, 14:38
Ich persoenlich finde die Moeglichkeit besser, wenn der User das Backup selbst erstellen kann, dann leidet auch kein Besucher darunter. Ausserdem kann er dann selbst bestimmen, wann ein Backup angebracht waere.

feuervogel
02-05-2005, 14:43
Ich persoenlich finde die Moeglichkeit besser, wenn der User das Backup selbst erstellen kann, dann leidet auch kein Besucher darunter. Ausserdem kann er dann selbst bestimmen, wann ein Backup angebracht waere.
jups, darauf wirds hinauslaufen...

xabbuh
02-05-2005, 14:57
Ich persoenlich finde die Moeglichkeit besser, wenn der User das Backup selbst erstellen kann, dann leidet auch kein Besucher darunter. Ausserdem kann er dann selbst bestimmen, wann ein Backup angebracht waere.
Sowas wird allerdings auch gerne mal vergessen und dann ist das Geweine gro, wenn irgendwo Daten verloren gehen.
Insofern wre es sicher nicht schlecht, wenn man die Technologie vorrausgesetzt, das Ganze auch noch per Cronjob oder alternativ dazu durch einer der anderen schon angesprochenen Varianten anbietet.

Serp
02-05-2005, 15:18
Ne Mglichkeit, damit man das nicht so leicht vergessen kann:

Wenn es ne Mglichkeit gibt, das Backup selbst anzustoen muss es wohl irgend ne Seite geben, die man dazu manuell aufruft. Diese Seite speichert dann in nem Cookie auf dem Rechner den aktuellen Zeitpunkt.
Jedesmal wenn jemand auf die Seite kommt wird nach eben diesem Cookie gesucht und die Zeiten werden verglichen - wenns Zeit frn Backup ist wird das erledigt und das Cookie aktualisiert.

Vorteile liegen denk ich auf der Hand, du musst nicht immer dran denken regelmig manuelle Backups zu machen und der einzige Benutzer, der durch die automatischen Backups ausgebremst wird, bist du. Einzige Voraussetzung ist halt, dass du halbwegs regelmig auf deiner eigenen Seite vorbeischaust...

dachris
02-05-2005, 15:47
Na dann wrde ich das aber auf dem Server selber speichern....(ich selber muss mich ja dann anmelden oder so....)...weil cookies verschwinden dann doch leicht :-)

|Coding
02-05-2005, 16:56
Sowas wird allerdings auch gerne mal vergessen und dann ist das Geweine gro, wenn irgendwo Daten verloren gehen.
PP nenne ich sowas...
Man kann ja auch nicht immer den Babysitter spielen.

|Coding
02-05-2005, 17:04
feuervogel, was Du aber machen knntest:

Scheib das Teil doch so, dass Du dem User die Moeglichkeit gibts alles selber zu machen.

Als zweite Option kannst Du das Teil so schreiben, dass man es per Cronjob aufrufen kann und dann linkst Du auf SELFPHP und den kostenlosen bzw. kostenpflichtigen Cronjob-Dienst :-)

WWW: https://www.selfphp.org/cronjobs/index.php

feuervogel
02-05-2005, 18:00
feuervogel, was Du aber machen knntest:

Scheib das Teil doch so, dass Du dem User die Moeglichkeit gibts alles selber zu machen.

Als zweite Option kannst Du das Teil so schreiben, dass man es per Cronjob aufrufen kann und dann linkst Du auf SELFPHP und den kostenlosen bzw. kostenpflichtigen Cronjob-Dienst :-)

WWW: https://www.selfphp.org/cronjobs/index.phpah stimmt, daran hab ich ja noch gar nicht gedacht :-)

p.s.: und bitte keine RL-namen ;-P

|Coding
02-05-2005, 18:49
ah stimmt, daran hab ich ja noch gar nicht gedacht :-)
Und das als Mod... Schaem dich :-D

sysop
03-05-2005, 23:59
hallo zusammen

ich setze sowas hnliches schon seit geraumer zeit ein.
aus spass an der freude werkle ich an einem reinen file-bassed board (forum) herum, zu dem ich ein portal gebaut habe. in diesem portal gibt es eine anzeige der meistbesuchten themen. da das immer wieder neue durchsuchen von hunderten dateien das ganze zu langsam machen wrde, habe ich einen cron-fake gebastelt, der jede volle stunde dem ersten besucher den aufbau einer datei "aufdrckt", die dann in der folge nur ausgelesen werden muss.

so habe ich das gamacht:
das letzte aufbaudatum wird in die datei geschrieben. kommt der besucher, wird die loginzeit genommen und mit der zeit in der datei verglichen. ist eine stunde vergangen, wird der aufbau gestartet, ansonsten das script verlassen.

dein problem bei einem backup sehe ich ausserdem noch darin, dass du wahrscheinlich laufzeiten bercksichtigen musst, die weit ber 30 sek. liegen. php wird also so einen fake-cron u.U. abbrechen. die laufzeiten bei mir liegen ca bei 5-10 sek. je nach server. deine laufzeiten werden wohl auch von der grsse des backups abhngen.

wenn du das ganze umsetzt, wrde mich das ergebnis aber sehr interessieren.

gruss sys;-)

|Coding
04-05-2005, 00:17
Es ist doch kein Thema den Timeout zu umgehen. Erst recht, wenn MySQL im Spiel ist.

Du arbeitest mit einem internen Timer (abgelichen mit max_execution_time), so liest Du immer xxxx Datensaetze aus der DB verarbeitest diese, dann rufst Du per HEADER das Script selbst wieder auf (nach ablauf des Timers), uebergibst noch die aktuelle Position und arbeitest dann mit der neuen Instanz weiter. Das Ganze solange bist das Backup vollstaendig ist.

sysop
04-05-2005, 00:52
schon richtig.

was macht man bei abbruch durch den user.
ignore_user_abort und header klappt in kombination das berhaupt ??

|Coding
04-05-2005, 00:57
Wenn ein User das Backup abbricht ist das halt hin und er muss es erneut machen, aber wer bricht ein Backup schon ab (wenn nicht gerade das Haus brennt)...

sysop
04-05-2005, 01:41
auch da hast du im prinzip recht, ich habe das nur so verstanden, dass das backup von irgend einem user gestartet werden soll, nicht ausschliesslich von denen, die an einem backup interessiert sind.
sprich irgendwer kommt auf die seite und startet das backup.

|Coding
04-05-2005, 02:25
Backups sollte man nur von denen erstellen lassen koennen, die es auch haben duerfen. Diese Leute werden das Backup auch nicht vorzeitig abbrechen, dann waere der Sinn der Sache irgendwie hin...

Fuer alle anderen, die kein Backup ziehen duerfen gilt -> "Du kommst hier net rein!"

Wie genau hattest Du es denn vor?

feuervogel
04-05-2005, 02:42
Du arbeitest mit einem internen Timer (abgelichen mit max_execution_time), so liest Du immer xxxx Datensaetze aus der DB verarbeitest diese, dann rufst Du per HEADER das Script selbst wieder auf (nach ablauf des Timers), uebergibst noch die aktuelle Position und arbeitest dann mit der neuen Instanz weiter. Das Ganze solange bist das Backup vollstaendig ist.
genau das habe ich bei einem benchmark-script gemacht, welches mir mal eben 50.000 datenstze in die db einfgen sollte. wre schn, htte mein browser nicht sowas wie ein "network.http.redirection-limit" welches ich von den standardmig 10 mal auf einen ziemlich groen wert hochgesetzt habe. dort lauert also auch eine gefahr!

|Coding
04-05-2005, 09:04
dort lauert also auch eine gefahr!
Hinsichtlich des Browser kann Du aber nicht viel unternehmen, da muss ein jeder selber ran. (Irgendwie logisch :-P)

dachris
04-05-2005, 13:23
Fr manche Dinge sollte man dann dochvielleicht ein shellscript auf dem Server einsetzen :-)....50.000 Datenstze via php ist gewagt :-)

|Coding
04-05-2005, 13:29
Ich glaube nicht all zuviele User in ihrem Webspacepaket einen Shellzugriff haben. Da muss halt PHP her und wenns ordentlich gemacht ist, wird das auch funzen.

dachris
04-05-2005, 13:35
Richtig, die Frage ist nur obs ab einer bestimmten Grsse halt noch Sinn macht.....

Sagens wir mal so, die Anforderungen bestimmen die Investition....

|Coding
04-05-2005, 13:42
Ich glaube kaum das einer mit einer Seite die viele User hat (mehrere 1000) oder der einen riesen Shop betreibt, sich mit shared Space abgibt. Der wird sich schlauerweise einen eigenen Server klar machen. Dann zieht man auch keine Backups mehr per Script, dann hat man so schoene Sachen wie Mirror-HDD.

dachris
04-05-2005, 14:20
Meine Rede :-)

Nur leider gibts immer noch zuviele die Investitionen in der Richtung scheuen....

|Coding
04-05-2005, 17:40
Das sind dann immer die, die zuerst schreien "Mama, meine Webseite ist put ;.(". Dabei gehoert zu einem groen Projekt mehr als nur die Userzahlen...

nivram
22-06-2005, 15:39
Hallo zusammen,
ich mchte die Idee mit der Mail nochmal aufschnappen:
Wie ist es denn wenn man vorher festlegt man mchte alle 3 Stunden (oder was weiss ich) ein Backup haben! Dann berprft man bei jedem User ob das Zeitintervall bereits rum ist und schickt eine Mail an den Administrator (bzw. Backup'ler)! Dort steht dann ein Link drin, den man kurz anklickt und dadurch dann das Backup (evt. mit Username & PW) erstellt und runtergeladen werden kann!

Das wre fr mich eine der besten Methoden!

weitere Vorschlge?

Gru,
nivRam

dachris
22-06-2005, 16:13
Dann kann man sich am eigenen Rechner gleich im Kalenderprogramm seiner Wahl einen Task erstellen....hat den gleichen Effekt....

nivram
25-06-2005, 18:08
Das mit dem Kalender ist aber nicht soooo gut... Was ist wenn man mal irgendwo etwas lnger weg ist.. Dann ist der Kalender nicht immer dabei.. Email (Grundvorraussetzung: Internet) ist immer da..

Man ist halt nicht immer an seinen PC gebunden..

meikel
05-07-2005, 13:45
Dabei gehoert zu einem groen Projekt mehr als nur die Userzahlen...
Richtig.

Zu einem groen Projekt gehrt in erster Linie auch ein dazu passender Server. Da es genug Provider gibt, die auch ein mysql Backup mit anbieten, gibt es keinen Grund, mit PHP ein SQL Backup nachzubasteln, weil der eine oder andere Nutzer kein Auto sondern nur ein Dreirad hat.

btw: knntest Du Dir dieses Forum auf einem funpic-ganz-umsonst-Account vorstellen? <ggg>