Archiv verlassen und diese Seite im Standarddesign anzeigen : pseudo-cronjob
feuervogel
02.05.2005, 10:40:10
hallo!
ich schreibe grade an einer applikation, bei der ich so etwas wie cronjobs einsetzen möchte. da aber jeder diese applikation bei sich einsetzen können sollte, ohne gleich root-zugriff haben zu müssen, 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 würdet 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. wäre nicht so schlimm, da nur bei jedem update/insert mal kurz nach gefragt werden würde, 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, 11:00:59
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 wäre es dann meiner Meinung nach sinnvoller, gleich darauf zu verzichten und lieber ein Backupscript zu schreiben.
|Coding
02.05.2005, 11:05:32
Wie findest Du einen zeitlichen conrjob-fake?
Bei jedem Besucher die aktuelle Zeit mit einer gespeicherten Zeit pruefen, ist die Differenz beider Zeiten groeßer 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 schließen...
dachris
02.05.2005, 11:12:08
Das ginge damit http://www.php-homepage.de/manual/function.ignore-user-abort.php
|Coding
02.05.2005, 11:21:24
ooopppsss... :-)
dachris
02.05.2005, 11:27:19
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 Unterstützung von echtem Cron
Unterstürtzung eines gefakten Cron
Manuelle Abarbeitung.....
Dann kann der User deines Programmes selber edntscheiden was das beste ist....
PS: Ein Backup würde ich nicht über mail verschicken, sondern eher auf dem Server lagern und dann können die verschiedenen Backupstände abgerufen werden......
feuervogel
02.05.2005, 13:17:55
PS: Ein Backup würde ich nicht über mail verschicken, sondern eher auf dem Server lagern und dann können die verschiedenen Backupstände abgerufen werden......
@dachris: ich will das backup ja haben, weil der server verrecken könnte, also wäre ein backup auf dem server in meinen augen etwas deplaziert...natürlich versieht man so eine datei mit datum - zur späteren sortierung usw.
@alle: wow, mit so vielen antworten hab ich nicht gerechnet...werde mir das ganze heute während einer vorlesung noch mal durch den kopf gehen lassen...
dachris
02.05.2005, 13:25:50
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 natürlich aus wenn alles der gleiche Server ist.....(hardwaremässig) 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 möglichst viele Alternativen....hier ist noch eine
Wenn ein Backup ausgeführt wurde schick dem User ne Mail das er sich das neue Backup jetzt runterladen kann (also mit psychologischer Kriegsführung den User zum Backup zwingen :-)
|Coding
02.05.2005, 13:38:44
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, 13:43:46
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, 13:57:23
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 wäre 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.
Ne Möglichkeit, damit man das nicht so leicht vergessen kann:
Wenn es ne Möglichkeit gibt, das Backup selbst anzustoßen 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 fürn Backup ist wird das erledigt und das Cookie aktualisiert.
Vorteile liegen denk ich auf der Hand, du musst nicht immer dran denken regelmäßig manuelle Backups zu machen und der einzige Benutzer, der durch die automatischen Backups ausgebremst wird, bist du. Einzige Voraussetzung ist halt, dass du halbwegs regelmäßig auf deiner eigenen Seite vorbeischaust...
dachris
02.05.2005, 14:47:14
Na dann würde 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, 15:56:07
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, 16:04:11
feuervogel, was Du aber machen könntest:
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: http://www.selfphp.de/cronjobs/index.php
feuervogel
02.05.2005, 17:00:36
feuervogel, was Du aber machen könntest:
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: http://www.selfphp.de/cronjobs/index.phpah stimmt, daran hab ich ja noch gar nicht gedacht :-)
p.s.: und bitte keine RL-namen ;-P
|Coding
02.05.2005, 17:49:45
ah stimmt, daran hab ich ja noch gar nicht gedacht :-)
Und das als Mod... Schaem dich :-D
sysop
03.05.2005, 22:59:22
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 würde, habe ich einen cron-fake gebastelt, der jede volle stunde dem ersten besucher den aufbau einer datei "aufdrückt", 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 berücksichtigen 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 grösse des backups abhängen.
wenn du das ganze umsetzt, würde mich das ergebnis aber sehr interessieren.
gruss sys;-)
|Coding
03.05.2005, 23:17:41
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
03.05.2005, 23:52:08
schon richtig.
was macht man bei abbruch durch den user.
ignore_user_abort und header klappt in kombination das überhaupt ??
|Coding
03.05.2005, 23:57:33
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, 00:41:38
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, 01:25: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, 01:42:53
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 datensätze in die db einfügen sollte. wäre schön, hätte mein browser nicht sowas wie ein "network.http.redirection-limit" welches ich von den standardmäßig 10 mal auf einen ziemlich großen wert hochgesetzt habe. dort lauert also auch eine gefahr!
|Coding
04.05.2005, 08:04:55
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, 12:23:21
Für manche Dinge sollte man dann dochvielleicht ein shellscript auf dem Server einsetzen :-)....50.000 Datensätze via php ist gewagt :-)
|Coding
04.05.2005, 12:29:34
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, 12:35:28
Richtig, die Frage ist nur obs ab einer bestimmten Grösse halt noch Sinn macht.....
Sagens wir mal so, die Anforderungen bestimmen die Investition....
|Coding
04.05.2005, 12:42:55
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, 13:20:21
Meine Rede :-)
Nur leider gibts immer noch zuviele die Investitionen in der Richtung scheuen....
|Coding
04.05.2005, 16:40:03
Das sind dann immer die, die zuerst schreien "Mama, meine Webseite ist put ;.(". Dabei gehoert zu einem großen Projekt mehr als nur die Userzahlen...
nivram
22.06.2005, 14:39:52
Hallo zusammen,
ich möchte die Idee mit der Mail nochmal aufschnappen:
Wie ist es denn wenn man vorher festlegt man möchte alle 3 Stunden (oder was weiss ich) ein Backup haben! Dann überprüft 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 wäre für mich eine der besten Methoden!
weitere Vorschläge?
Gruß,
nivRam
dachris
22.06.2005, 15:13:22
Dann kann man sich am eigenen Rechner gleich im Kalenderprogramm seiner Wahl einen Task erstellen....hat den gleichen Effekt....
nivram
25.06.2005, 17:08:43
Das mit dem Kalender ist aber nicht soooo gut... Was ist wenn man mal irgendwo etwas länger 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, 12:45:12
Dabei gehoert zu einem großen Projekt mehr als nur die Userzahlen...
Richtig.
Zu einem großen Projekt gehört 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: könntest Du Dir dieses Forum auf einem funpic-ganz-umsonst-Account vorstellen? <ggg>
vBulletin® v3.8.3, Copyright ©2000-2012, Jelsoft Enterprises Ltd.