Bruker php sleep() masse ressurser?

kongen

kongemedlem
Hvis man skal sende 50 eposter med 5 sekunders mellomrom så bruker browseren over 4 minutter for å laste ferdig siden med scriptet.

Hvis jeg bruker cron istedet, vil scriptet da bruke masse ressurser på webserveren, eller er ressursene et slikt script bruker ubetydelig for en webserver?

Finnes det noe bedre enn å bruke sleep() for å øke tiden mellom oppgaver.
 

drlinux

Konsulent i PHP og Linux
sleep() bruker ingen ressurser selv, og cron er nok bedre til å løse dette enn å kjøre det i nettleseren.

Husk bare at cronjobben må sjekke at det ikke allerede kjører et script, slik at du ikke sender dobbelt opp med epost. Det kan du gjøre med en låsfil.

Her er et eksempel på dette;

Kode:
#!/bin/sh
# katalogen under må settes til fullstendig sti til hvor denne filen ligger.
KATALOG=/home/brukernavn/cron
LOCKFILE="mittScript.lock";
RUNFILE="mittScript.run";
cd $KATALOG;

# Merk en fil for å vise at cron-jobb kjører
/usr/bin/touch $RUNFILE;

if [ ! -e $LOCKFILE ]
then
    /usr/bin/touch $LOCKFILE;
    /usr/bin/php $KATALOG/mittScript.php;
    /bin/rm $LOCKFILE;
fi;

Lagre scriptet i samme katalog. Kall det f.eks. mittScript.sh og sett chmod +x på det. Deretter kjører du dette fra cron, og så vil det kjøre php-scriptet hvis det ikke allerede kjører.
 

kongen

kongemedlem
Webhotellet har en begrensning på 60 sekunder et script kan kjøre. Dette scriptet vil sikkert bruke 4 minutter på serversiden også, og kan da ikke brukes.

Finnes det andre måter å gjøre dette på enn å bruke sleep() ?
 

kongen

kongemedlem
Kode:
LOCKFILE="mittScript.lock";
RUNFILE="mittScript.run";

...

    /usr/bin/php $KATALOG/mittScript.php;

Skal ikke LOCKFILE og RUNFILE referere til php scriptet, slik at det blir:

Kode:
LOCKFILE="mittScript.php";
RUNFILE="mittScript.php";
 

drlinux

Konsulent i PHP og Linux
Skal ikke LOCKFILE og RUNFILE referere til php scriptet, slik at det blir:

Kode:
LOCKFILE="mittScript.php";
RUNFILE="mittScript.php";

Nei, LOCKFILE er en fil som skapes for å vise at jobben kjøres. shellskriptet sjekker om den ligger der, og start kun php-skriptet hvis LOCKFILE ikke finnes. Når jobben er ferdig slettes LOCKFILE.

Hele poenget med LOKCFILE er å unngå at det kjøres to instanser av php-skriptet samtidig.

RUNFILE er bare en fil jeg bruker som markør til å vise når skriptet sist kjørte. Den har ingen funksjon, så referansene til denne kan slettes (eller bare la de være).
 
Topp