Bruker php sleep() masse ressurser?

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.

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;

#!/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.

pirke pirke

Du bruker ikke $RUNFILE til noe fornuftig…

Jo. Jeg bruker $RUNFILE til å vise når scriptet sist kjørte (er cron aktiv?). Derfor touch på den.

Jo, men dette sjekkes jo ikke på noe sted, filen touches bare og thats it… og blir det ikke litt kjøtt på flesk siden du allerede blokkerer andre kjøringer med $LOCKFILE ?

Det er kjøtt på flesk, men det er greit. Touch på filen er bare en indikator for meg at scriptet har kjørt, slik at dette kan sjekkes. Bruker det selv, men var unødvendig å ta med i eksempelet.

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() ?

Jeg vil anta den begrensningen er satt på Apache/PHP, og dermed gjelder script kjørt i nettleser. En cronjobb bør gå fint.

På webhotellet så står det:

max_execution_time = 60
max_input_time = 60

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

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).