php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Hintergrundscript


 
cheeby
09-08-2003, 22:16 
 
Ich hab da irgendwie eine Frage die mich seit längerem beschäftigt:

Ist es möglich am Server im Hintergrund ein Script laufen zu lassen, das mir kontrolliert ob in einer mysql - tabelle, einträge sind, und wenn ja das dieses script ein php-script aufruft?

Wenn ja wie funktioniert das ganze, wenn nein gibts alternativen dazu.

thx im voraus

 
Zirp
09-08-2003, 22:28 
 
Kuck dir mal die Links an

http://de3.php.net/manual/de/function.mysql-list-tables.php
http://de3.php.net/manual/de/function.mysql-list-fields.php

 
cheeby
09-08-2003, 22:38 
 
naja da hab ich nur ne funktion in der ich sehe ob ein datensatz drin ist.
soweit is es ja kein problem, nur die frage ist ob die möglichkeit besteht ein script im hintergrund laufen zu lassen, das den ganzen tag (24 stunden) durchgehend läuft und sobald ein datensatz in der tabelle auftaucht dann ein gewisses script aufruft.

 
Wotan
10-08-2003, 11:50 
 
Willst du das ohne aufruf der I-Net-Seite machen, oder soll das beim Aufruf deiner I-Net-Seite gemacht werden.

Wenn du das ohne Aufruf machn willst, dann brauchst du einen CronJob.
Ansonsten bau einfach in deiner Seite ein Script ein, welches das Prüf-Script immer starte wenn ein User auf deiner Seite ist.

 
cheeby
10-08-2003, 12:15 
 
naja es soll ohne aufruf gehen.

cronjob geht ja nur im minutentakt oder?

ich erklärs nochmal im detail:
das script soll im hintergrund laufen und die tabelle auf einträge prüfen. ich speichere da ne zeitangabe mit und zu dem zeitpunkt den ich da angebe soll ein anderes script dann laufen. sollte also wenns geht sollte das im prinzip auf die sekunde genau funktionieren

 
Wotan
10-08-2003, 12:36 
 
CronJob kannst laufen lassen wann du willst.
Minutlich
Stundlich
Täglich
Wöchentlich
Jährlich

Kommt halt darauf an wie du den einstellst.
Dazu brauchst aber einen Prvider der dir das ermöglicht bzw. einen Root-Server.

 
RobertTheHero
10-08-2003, 12:50 
 
Wenn du einen rootserver hast, kannst du auch das script die ganze zeit im hintergrund laufen lassen, und nach selbstbestimmter zeit,
die datenbank abfragen.

Pseudocode

set_time_limit(0);

while (1==1) // endloschleife
{
checke_datenbank

if (ist was zu tun)
{
tu das
}

sleep(solange du möchtest);
}



script tust dann unter linux so starten

nice /usr/local/bin/php -q scriptname.php >logfile &


und dann läuft und läuft das...

gruss

rth

 
cheeby
10-08-2003, 15:22 
 
die idee mit der endlosschleife gefällt mir, an das hab ich gar nicht gedacht.

danke für die hilfe

 
Wotan
10-08-2003, 15:33 
 
Dir sollte aber schon klar sein, das das die Performec in den Keller zieht.:teach: Mach das lieber mit einem CronJob alle 20 Minuten, ist für den Server besser.:teach:

 
TheUser
10-08-2003, 15:48 
 
hmm, es gibt doch ein automatisches timeout von php, oder?

das müsste man vorher deaktivieren.

 
cheeby
10-08-2003, 15:52 
 
Original geschrieben von TheUser
hmm, es gibt doch ein automatisches timeout von php, oder?

das müsste man vorher deaktivieren.

das bedeutet?

ja das problem mit der performance is mir schon klar, aber irgendwie is in meinem kopf die kranke vorstellung das es ziemlich egal ist ob ich jetzt jede sekunde 1-2 datenbankabfragen durchführe oder alle 20 minuten 1500 - 2000. weiß aber eh ned ob das so stimmt.

 
Wotan
10-08-2003, 16:12 
 
Wie kommst jetzt auf den wert von 1500-2000 DB-Anfragen??? :confused:

Du fragst die DB doch nur einmal ab und läst dann prüfen ob es neue Einträge gibt. Oder verstehe ich da jetzt was verkehrt.

 
RobertTheHero
10-08-2003, 16:14 
 
hmm, es gibt doch ein automatisches timeout von php, oder?

hab ich doch


set_time_limit(0);



rth

 
cheeby
10-08-2003, 16:22 
 
Original geschrieben von Wotan
Wie kommst jetzt auf den wert von 1500-2000 DB-Anfragen??? :confused:


sind zurzeit theoretische annahmen die ich aus meinen bisherigen erfahrungen hochgerechnet habe...und es sind keine db-anfragen, sondern datensätze die abgearbeitet gehören.

Original geschrieben von Wotan
Du fragst die DB doch nur einmal ab und läst dann prüfen ob es neue Einträge gibt. Oder verstehe ich da jetzt was verkehrt.

*ja ich frag sie und prüfe ob es einträge gibt die die bedingung erfüllen
*wenn ja führ ich ein bestimmtes script aus
*wenn nein passiert nichts

und das ganze geht dann so weiter, sollte jede sekunde überprüft werden... deshalb ist die idee mit der endlosschleife nicht mal so dumm.

nur statt dem sleep(); wär vielleicht ein usleep(); besser mit 5-6 mikrosekunden.

denkst du das das der server performancemäßig aushält? ist ja im grunde nichts anderes als wenn jede sekunde eine/mehrere manuelle abfrage(n) geschickt wird/werden, oder?

 
RobertTheHero
10-08-2003, 16:33 
 
Durch das nice beim aufruf des scriptes, gibts du dem process ne niedrige
priorität. So das normale Prozesse, vorrang haben. Ich mach das bei mir
auf dem server mit ein paar scripten parallel, und das klappt wunderbar.

Du musst nur aufpassen, das dein script nicht, immer mehr speicher
schluckt, also schön die abfrage ergebnis von mysql immer wieder
freigeben.


nur statt dem sleep(); wär vielleicht ein usleep(); besser mit 5-6 mikrosekunden.

für die paar mikrosekunden kannst du es dann gleich sparen, jede abfrage
der Datenbank von dir wird wahrscheinlich länger als die 5-6 microsekunden dauern.

gruss

rth

 
Wotan
10-08-2003, 16:37 
 
Bei 5-6 mirkosecunden brauchst schon einen leistungsstarken Server.
Mit ausreichend Arbeitsspeicher und CPU-Power.
Aber dennoch sollte dir klar sein das andere Abfrage dann etwas länger brauchen.

Was hast du damit vor, für was braucht man sowas??? Das wird mir einfach nicht klar.

 
cheeby
10-08-2003, 17:15 
 
upps dachte ne sekunde dauert nur 1000 mikrosekunden, sind ja ne million, na dann schon mindestens 500000 mikrosekunden ins usleep();
naja man lernt dazu ;)

siehts dann besser aus mit der serverlast?

wofür ich dass brauche? naja hab mir gedacht ich probier mal so zum spass ein kleines nices browsergame zu proggen. und für das bau und kampfscript brauch ich eben ein kleines script im hintergrund das mir die dinge rechtzeitig berechnet.

hört sich wahrscheinlich verrückt an aber nen versuch is wert ;) hab ja genug zeit und lernen tut man bei so unsinnigen projekten auch ne menge


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:09 Uhr.