Avatar billede darkside Nybegynder
04. januar 2004 - 16:21 Der er 30 kommentarer og
1 løsning

Output hver time

Nogen der har en ide om hvordan man laver en lille while løkke der henter noget ud fra en DB hver time ?

sleep() kan ikke bruges da det stopper scriptet

/DS
Avatar billede Slettet bruger
04. januar 2004 - 16:27 #1
Det gør du _ikke_ med en while løkke og sleep.

Det gør du på linux med crontab og et cronjob.
Avatar billede Slettet bruger
04. januar 2004 - 16:27 #2
Cronjob'et kører så et PHP script.
Avatar billede darkside Nybegynder
04. januar 2004 - 16:28 #3
Det er ikke en holdbar løsning, efter som scriptet SKAL køre hele tiden
Avatar billede anddk Praktikant
04. januar 2004 - 16:32 #4
Er det din egen server ??

Hvis det er en win2000 eller 2003 server kan du bare lave det som et job, der bliver kørt hver time.
Avatar billede Slettet bruger
04. januar 2004 - 16:34 #5
"Det er ikke en holdbar løsning, efter som scriptet SKAL køre hele tiden"

Skulle det ikke kun gøre noget hver time?
Avatar billede mc.lucifer Praktikant
04. januar 2004 - 16:36 #6
fik lige en ide men vil ikke love dig at den på nogen måde er optimal eller funktionel, men du kan jo køre en løkke der ser på klokken, og køre løkken heletiden ind til at minutter og sek == 00:00

Bare en tanke, undskyld hvis den ikke virker det var bare et hurtigt indfald

MC
Avatar billede mc.lucifer Praktikant
04. januar 2004 - 16:40 #7
men så for man vel problemmet med php´s timeout så den gå ikke, Sorry

MC
Avatar billede darkside Nybegynder
04. januar 2004 - 16:41 #8
MC, Det lyder som det jeg skal bruge!

Timeout er ikke noget problem, det er min egen server! ;)

Kan du give et eks ?
Avatar billede Slettet bruger
04. januar 2004 - 16:42 #9
Hvorfor skal du have et script, der kører hele tiden, og kun gør noget én gang i timen?
Avatar billede darkside Nybegynder
04. januar 2004 - 16:42 #10
anddk, Windows som server, nej tak... kører FreeBSD.

Scriptet er en IRC Bot der skal hente data 1 gang pr time i en mysql DB.
Avatar billede darkside Nybegynder
04. januar 2004 - 16:43 #11
mercur8, Fordi hvis scriptet ikke kører falder botten af! ;)
Avatar billede Slettet bruger
04. januar 2004 - 16:44 #12
Du kunne evt. lade et andet script (cron scriptet) hente de data.
Avatar billede mc.lucifer Praktikant
04. januar 2004 - 16:44 #13
puhhh nej det sakl du nok have de store php folk til da jeg ikke lige har sat min php hjerne igang
men du skal have nogle var som jeg ikke lige kan huske hvordan hente
$minutter = Minutter
$sek = Sek

do while $minutter And $sek != 0
bla bla

MC
Avatar billede darkside Nybegynder
04. januar 2004 - 16:47 #14
mercur8, Kan ikke bruges...

Det script som kører konstant holder en socket forbindelse igang, og før der kan sendes noget der skal det igennem hovedscriptet
Avatar billede mc.lucifer Praktikant
04. januar 2004 - 16:48 #15
nu har jeg selv kun prøvet php på en Windows 2k server med IIS og de par gange jeg har lavet en fejl i min kode med en uafsluttet while sætning der har min server næsten været umulig at kontakte, "det er en 1800 Mhz" Altså alfa omega er vel et en løkke der kun stoppes en gang i timen må da kræve kæmpe mange cpu resurcer

MC
Avatar billede mc.lucifer Praktikant
04. januar 2004 - 16:50 #16
et cron job må da give en mindre belastet server evt lade den køre den hvert 5 eller hvert 2 minut, kan det ikke gøre det

MC
Avatar billede darkside Nybegynder
04. januar 2004 - 17:11 #17
Desværre, Den skal kun køre 1 gang pr time..

Min server klarer sig nu fint selvom det er en gammel spand, har ikke dræbt den med et forkert script endnu
Avatar billede tefcke Nybegynder
04. januar 2004 - 19:03 #18
Jeg ved ikke om det bare er mig, men når jeg hører om while løkker som står og laver aktiv venten, så får jeg en dårlig smag i munden.

En tilføjelse er, at php måske ikke er det optimale til det du er i gang med at lave. Mit bud er at din eneste mulighed er aktiv venten.
Avatar billede darkside Nybegynder
04. januar 2004 - 20:16 #19
Og det gøres hvordan ?
Avatar billede tefcke Nybegynder
05. januar 2004 - 12:59 #20
Aktiv venten:
while (true) {
  ...
}

Dette er dog et stort ressurce spild, da man hele tiden står og bruger tid på at lave ingen ting.
Avatar billede tefcke Nybegynder
05. januar 2004 - 13:02 #21
Dessuden, hvad er problemet med at have et crontab?
Avatar billede fcknet Nybegynder
05. januar 2004 - 16:00 #22
Prøv nu lige at høre her.
Den løsning med at køre scriptet hver time ved at lave en løkke er fuldstændig uholdbar.

hvorfor ikke bare lave det cronjob som kører en gang i timen?
Avatar billede darkside Nybegynder
05. januar 2004 - 19:41 #23
Fordi scriptet skal køre hele tiden, ellers kan botten ikke svare quakenet serveren når den bliver Ping'et.
Avatar billede tefcke Nybegynder
05. januar 2004 - 21:38 #24
Hvordan holder du botten igang?
Avatar billede darkside Nybegynder
06. januar 2004 - 09:53 #25
Starter den via php

eks php bot.php i en shell
Avatar billede tefcke Nybegynder
06. januar 2004 - 14:09 #26
JaJa, men hvordan holder du den kørende, når du har startet den?

Er det et problem at lave et andet scriptet som bliver kørt hvert time?
Avatar billede darkside Nybegynder
06. januar 2004 - 15:35 #27
Ja, scriptet holder sig selv kørende når den er startet..
Avatar billede tefcke Nybegynder
06. januar 2004 - 16:25 #28
Hvis du kan holde scriptet i gang selv, så prøv følgende kodestump:
<?php

// Antallet af sec på 1 dag
$dayInSec = 86400;

// Hvornår opdaterede vi sidst?
//  Denne linje skal med, for første gang vi når her til, har vi aldrig
//  brugt $lastUpdate
$lastUpdate = !isset($lastUpdate) ? time() : $lastUpdate;

// Tjekker om det er gået over 24 timer
if ( $lastUpdate + $dayInSec < time() ) {
    // Har skal der hentes ud af databasen
    // ...
    // mysql bla. bla.
    // ...
    // Opdater hvornår der sidst er blevet opdateret
    $lastUpdate = time();
}
?>
Avatar billede darkside Nybegynder
06. januar 2004 - 16:30 #29
Det kører kun 1 gang pr dag ikke sandt?

Den skal køre hver time
Avatar billede tefcke Nybegynder
06. januar 2004 - 18:14 #30
<?php

// Antallet af sec på 1 time
$hourInSec = 60*60;

// Hvornår opdaterede vi sidst?
//  Denne linje skal med, for første gang vi når her til, har vi aldrig
//  brugt $lastUpdate
$lastUpdate = !isset($lastUpdate) ? time() : $lastUpdate;

// Tjekker om det er gået over 24 timer
if ( $lastUpdate + $hourInSec < time() ) {
    // Har skal der hentes ud af databasen
    // ...
    // mysql bla. bla.
    // ...
    // Opdater hvornår der sidst er blevet opdateret
    $lastUpdate = time();
}
?>
Avatar billede tefcke Nybegynder
06. januar 2004 - 18:14 #31
Så kører den 1 gang i timen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester