[PHP] Cronjob de juiste manier?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een script geschreven voor het versturen van mail in PHP. Dit script is onderdeel van een programma waarin mailings kunnen worden aangemaakt en opgemaakt e.d. Zodra er in het programma een opdracht wordt gegeven tot het versturen de mailing wordt deze klaar gezet voor het verstuur script.

Wat ik nu wilde doen is het verstuur script aanroepen met een cronjob. Deze cronjob checkt dan om de X tijd of er nog mailings klaar staan om verstuurd te worden. Zodra er een klaar staat zal hij deze gehele mailing gaan versturen, dit kunnen aardig wat mailtjes zijn (max +/- 50.000). De verstuur functie controleert om de zoveel tijd de load average van de server en geeft de server wat ademruimte door het proces even te sleepen als deze te hoog wordt.

Tot nu toe is dit geheel ook geen probleem, het werkt prima.

Waar ik een beetje mee zit is dat met deze opzet het verstuurproces niet beheerbaar is. Er is nu geen mogelijkheid om tijdens het versturen het proces het programma te onderbreken. Stel er gaat iets mis, er is door de gebruiker een verkeerde doelgroep geselecteerd of er staat een domme typfout in, dan kan er niets meer aan gedaan worden.

Nu zou er een hele dikke if kunnen komen in de cronjob, zoiets als...

while($er_mailtjes_zijn_om_te_versturen){
if(!$onderbroken){
// verstuur proces
}
}

...waarin de variabele $onderbroken tijdens de loop wordt opgehaald uit de database.

Maar dit lijkt me niet echt een nette oplossing, nu vraag ik mij het volgende af:

Is er een manier om de cronjob zelf vanuit PHP af te sluiten?
(Ik neem aan van niet, waarschijnlijk heb je een proces id nodig welke je niet weet?)
Zo niet, is dit wel juiste manier om het proces uit te voeren, wat zou een beter oplossing zijn?

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou het gewoon niet onderbreken. Maar liever de gebruiker de mogelijkheid geven om zijn of haar e-mail (verplicht) te evalueren. Een vorm van 'preview' dus. Versturen is versturen.

Je haalt je anders sowieso een hoop administratie op de hals. Waneer al een deel met foutieve mailtjes is verstuurd dan zou je enkel diegene een verontschuldigings mailtje willen sturen. Je bent dan dus genoodzaakt dergelijke informatie bij te houden.

Acties:
  • 0 Henk 'm!

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 19:48

pistole

Frutter

ik heb ook iets dergelijks gemaakt (maar dan in .NET) waarin ik de gebruiker de mogelijkheid geef een mailing 'on hold' te zetten.
De mailer controleert continu dit vinkje en onderbreekt de mailing als het vinkje 'aan' staat.
Verwijderd schreef op maandag 15 mei 2006 @ 11:08:
Ik zou het gewoon niet onderbreken. Maar liever de gebruiker de mogelijkheid geven om zijn of haar e-mail (verplicht) te evalueren. Een vorm van 'preview' dus. Versturen is versturen.

Je haalt je anders sowieso een hoop administratie op de hals. Waneer al een deel met foutieve mailtjes is verstuurd dan zou je enkel diegene een verontschuldigings mailtje willen sturen. Je bent dan dus genoodzaakt dergelijke informatie bij te houden.
Preview lijkt me niet meer dan logisch, evenals het registreren aan wie welke e-mail is verstuurd (zodat als je verstuurproces de mist in zou gaan, je de mailing weer kan oppakken zonder het risico te lopen dat je iemand dubbel spamt.. ehh mailt :+ )

[ Voor 66% gewijzigd door pistole op 15-05-2006 11:15 ]

Ik frut, dus ik epibreer


Acties:
  • 0 Henk 'm!

  • Kayshin
  • Registratie: Juni 2004
  • Laatst online: 09-03-2018

Kayshin

Bl@@T @@P!!!

Ik denk ook dat als je dit wilt oplossen, je eigen manier de beste/makkelijkste zal zijn. Dynamisch aangeven of er wel/niet uitgevoerd moet worden met een eenvoudig vinkje dus.

My personal videoteek: -Clique-; -NMe- is een snol!


Acties:
  • 0 Henk 'm!

  • kamerplant
  • Registratie: Juli 2001
  • Niet online
Verwijderd schreef op maandag 15 mei 2006 @ 10:38:
Maar dit lijkt me niet echt een nette oplossing, nu vraag ik mij het volgende af:
Waarom is dat niet netjes? :o

🌞🍃


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
pistole schreef op maandag 15 mei 2006 @ 11:14:
ik heb ook iets dergelijks gemaakt (maar dan in .NET) waarin ik de gebruiker de mogelijkheid geef een mailing 'on hold' te zetten.
De mailer controleert continu dit vinkje en onderbreekt de mailing als het vinkje 'aan' staat.

[...]

Preview lijkt me niet meer dan logisch, evenals het registreren aan wie welke e-mail is verstuurd (zodat als je verstuurproces de mist in zou gaan, je de mailing weer kan oppakken zonder het risico te lopen dat je iemand dubbel spamt.. ehh mailt :+ )
Een preview zit er inderdaad in, net als het bijhouden naar welk adres de mailing verstuurd is. Mocht de cronjob worden afgebroken voor wat voor reden dan ook kan deze gewoon opnieuw worden uitgevoerd en wordt er verder gegaan waar hij gebleven was.
Datafeest schreef op maandag 15 mei 2006 @ 11:19:
[...]

Waarom is dat niet netjes? :o
Onder andere omdat hij dan 50.000 keer in de database moet gaan checken of dat hij nog steeds verder mag gaan met het verzenden van de mailing.

In principe kan het ook gewoon met de check alleen hoopte ik dat je wat meer controle kon hebben over het uitvoeren van de cronjob vanuit php. Nu is het een proces dat je afvuurt waarvan je hoopt dat alles goed gaat.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op maandag 15 mei 2006 @ 13:14:
[...]
Onder andere omdat hij dan 50.000 keer in de database moet gaan checken of dat hij nog steeds verder mag gaan met het verzenden van de mailing.
Je kunt hem toch ook om de 25 mailtjes laten kijken of bij verder mag gaan?

PHP:
1
2
3
4
5
6
7
8
while ( blabla ){
   $i++;
   if ( $i == '25' ){
     check_mag_doorgaan();
      $i = '0';
   }
  verzend_mail();
}

[ Voor 42% gewijzigd door Verwijderd op 15-05-2006 13:24 ]


Acties:
  • 0 Henk 'm!

  • Av3ng3rtje
  • Registratie: December 2002
  • Laatst online: 18-08 10:15
mag dat niet zo:

PHP:
1
2
3
4
5
6
7
8
9
10
<?
while($condition) {
     $i++;
     if($i == 25) {
        sleep(30);
        $i = 0;
     }
     verzendEmail();
}
?>

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op maandag 15 mei 2006 @ 13:21:
[...]


Je kunt hem toch ook om de 25 mailtjes laten kijken of bij verder mag gaan?
Dat is inderdaad al wel een optie, een bepaalde marge is best acceptabel.
Ja dat mag, maar het is maar een stukje pseudo-code...? :Y)

[ Voor 26% gewijzigd door Verwijderd op 15-05-2006 13:50 ]


Acties:
  • 0 Henk 'm!

  • pistole
  • Registratie: Juli 2000
  • Laatst online: 19:48

pistole

Frutter

Verwijderd schreef op maandag 15 mei 2006 @ 13:14:
[...]
Onder andere omdat hij dan 50.000 keer in de database moet gaan checken of dat hij nog steeds verder mag gaan met het verzenden van de mailing.

In principe kan het ook gewoon met de check alleen hoopte ik dat je wat meer controle kon hebben over het uitvoeren van de cronjob vanuit php. Nu is het een proces dat je afvuurt waarvan je hoopt dat alles goed gaat.
Ik zie totaal geen problemen in het 50k keer checken in de database. Tevens heb je dan de 'controle' die je wenst (je kan vanuit php dat vinkje zetten).

Ik frut, dus ik epibreer

Pagina: 1