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