Cronjob Complicatissimi

Salve a tutti, sono alle prese con una semplice pagina di script php che è stata notevolmente sottovalutata nella sua complessità per inesperienza.

Ho una lista di utenti circa 100.000 e devo mandare una email all'utente con su scritto:

Gentile Ulisse,
..................................................................................
..................................................................................
..................................................................................
..................................................................................
link: www.itaca.gr/index.php?auth=34kj23h4kh23
..................................................................................
..................................................................................
..................................................................................
A presto
Penelope

inoltre devo registrare un valore numerico nel campo dei dati personali corrispondente allo stato dell'utente che in questo caso sarebbe il numero: 3

Ora tutto ciò deve essere fatto da un cronjob. E' impossibile vero?

Grazie

 :bye:

inviato 10 anni fa
ulisse
X 0 X

Non è impossibile... dipende dal tempo di esecuzione che imposti sulla pagina(set_time_limit)

risposto 10 anni fa
zeta80
X 0 X

Ti assicuro che impostando anche ad infinito non esegue lo script fino in fondo. Mi appare una finestrella di download utilizzando firefox.

risposto 10 anni fa
ulisse
X 0 X

Penso che tu abbia usato uno script troppo complesso...  e poi cercherei di dividere gli utenti ed eseguirei più volte lo script ad intervalli brevi di cron.

risposto 10 anni fa
zeta80
X 0 X

Come si può dividere un cronjob?  :bye:

risposto 10 anni fa
ulisse
X 0 X

Quanto è il tempo limite del server per inviare un'email?

Se un'email rimane in attesa, lo script si ferma.

risposto 10 anni fa
Marco Grazia
X 0 X

Da dove vedo il tempo limite per l'invio dell'email?

risposto 10 anni fa
ulisse
X 0 X

Non lo vedi, in pratica dipende dal server accettante, se l'indirizzo è falso o inesistente, se il server è down, se c'è il sole ... e da quante email può spedire il tuo server, prima di bloccarsi perché la coda di spedizione è piena.

Ma davvero hai 100.000 indirizzi o è un numero a caso? Perché solitamente i server che forniscono servizio di hosting limitano a 300 il numero massimo di email da spedire per giornata, a rischio di finire nelle black list anti spammer.

risposto 10 anni fa
Marco Grazia
X 0 X

Ciao Marcolino,

il progetto è molto grande ed il numero è arrotondato per difetto. Purtroppo ce ne sono molti di più. Che fare? Si può schedulare in un modo differente? Non so! Forse una pagina che fa il refresh di se stessa e per ogni refresh elabora un elemento.... o un sistema Ajax o che altro. Devo chiamare gli alieni per poter inviare tutte queste email "richieste dall'utente"?

Grazie

 :bye:

risposto 10 anni fa
ulisse
X 0 X

Vedi Ulisse, così, possiamo continuare a parlarne per ore o anche per giorni, francamente non penso che parlare così si possa risolvere.

Un server dedicato per spedire 100mila email al giorno, può essere configurato, ovvero se hai la dispnibilità del server puoi mettere le mani sul motore che spedisce le email e modificarne i parametri di invio.

Inoltre cronjob è solo un programma che gira sul server, e che a momenti fa determinate cose, quindi non è che cronjob può fare molto per risolvere i problemi dello script.

Magari quello che puoi fare, è fargli lanciare lo script più volte al giorno, in modo da spezzettare gli invii.

Un'ultima cosa, 100mila indirizzi per una mailing list? Che io sappia nemmeno Pluto o ZioBudda hanno tanti utenti, sicuro che sia una roba legale?  :uglystupid:

risposto 10 anni fa
Marco Grazia
X 0 X

Certo che si tratta di "roba legale", non scherzo mica. E' un progetto molto grande dove si collabora fra nazioni e gli utenti sono moltissimi.

come faccio a spezzettare un cronjob?

Grazie

 :bye:

risposto 10 anni fa
ulisse
X 0 X

Buona ricerca:

http://www.google.it/linux?hl=it&q=cronjob&btnG=Cerca&meta=lr%3Dlang_it

il fatto è che cronjob gira e a ogni scadenza lancia un programma, la cosa che puoi fare è fargli lanciare il tuo script più volte nella giornata, ma ovviamente ogni volta che lo script viene lanciato, non deve ricominciare da zero, ma riprendere dall'ultima email lanciata.

risposto 10 anni fa
Marco Grazia
X 0 X

Niente di nuovo nel web pensavo che sapevate qualcosina in più.

Cercherò  :bye:

risposto 10 anni fa
ulisse
X 0 X

Potresti procedere in questo modo:

Ipotesi: in (M-1) minuti riesci ad inviare mediamente K email. Devi inviare T email in tutto.

1) programma un cronjob in modo che ti esegua lo script X.php ogni M minuti, magari per un massimo di T/K volte.

2) X.php legge (da un file di testo o dal DB) il valore di un numero Y

3) Se Y * K > T termina la sua esecuzione

4) X.php esegue una query per ricavare K indirizzi email a cui inviare la newsletter. La query è del tipo SELECT email FROM tabella LIMIT Y*K, (Y+1)*K

5) X.php inviate le K mail

6) X.php incrementa e salva Y

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

 :( Purtroppo posso impostare per ogni minuto ma per ogni ora.

risposto 10 anni fa
ulisse
X 0 X

Meglio ogni ora, dato che lanciare lo script ogni minuto rischi solo di sovraccaricare il server e di accodare il numero di email.

In pratica come ti stiamo dicendo, lanci lo script ogni 24 ore.

risposto 10 anni fa
Marco Grazia
X 0 X

Comunque il discorso è abbastanza delicato. Quando bisogna inviare un numero elevatissimo di email bisogna verificare che tutto il sisitema sia in grado di farlo e sopratutto che il fenomeno non venga interpretato come un qualche attacco DOS o un invio di SPAM. In particolare bisogna vedere come è configurato il server SMTP e se accetterà l'invio di tutte quelle mail in una botta sola.

Il mio consiglio è quello di contattare il gestore del server e vedere quale sia la soluzione più adatta all'invio di tutte queste mail.

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Beh io posso impostare l'avvio dei cronjob per ogni ora del giorno GMT.

Il sistema SMTP controlla l'invio delle email ed il tetto massimo è: 500 emails in 5 minuti

Quindi se non ho capito male devo creare uno script in php con smtpmailer che mi permette di inviare delle emails e di registrare in un archivio un valore che identifica l'invio della email. Dopodicchè devo creare un cronjob impostato in una ora qualsiasi che esegua lo script.

La prima volta che lo script si avvia quanti elementi deve analizzare in base alle formule di Gianni? Io non conosco la quantità massima di email inviabili in un colpo solo poichè dipende dal carico del server.

grazie

 :bye:

risposto 10 anni fa
ulisse
X 0 X

500 email ogni 5 minuti, vuol dire 864000 email ogni giorno.

Quindi credo che il problema non si ponga in SMTP ma proprio in quel limite di 500 email.

In pratica se lo script che tu lanci cerca di spedire in una certa data, 100000 email, ovviamente il server ti blocca tutto alla 501esima email.

risposto 10 anni fa
Marco Grazia
X 0 X

Provando a "sguinzaiarlo" per vedere cosa succede invia solamente 250 email ma il valore è variabile. Alle volte ne invia appena 50.

Che fare?

risposto 10 anni fa
ulisse
X 0 X

Devi vedere i file di log del server e capire perché non invia le email, secondo me non c'entra lo script.

risposto 10 anni fa
Marco Grazia
X 0 X

Purtroppo non posso vedere i file di log dell'hosting.  :'(

risposto 10 anni fa
ulisse
X 0 X
Purtroppo non posso vedere i file di log dell'hosting.  :'(

non si può sviluppare un'applicazione così complessa in queste condizioni  :dunno:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Cioè, hai un hosting che ti permette di spedire 100000 email al giorno, senza nemmeno cadere nelle black list antispam, e non ti fanno vedere i log?

Devo rivedere le politiche del mio server, da oggi ai miei utenti, nemmeno il PHP gli faccio usare  :2funny:

A parte gli scherzi, come dice giustamente gianni, per un'applicazione così complessa, l'uso del server a livello esclusivo è importante e necessario, ma non avete pensato a prenderne uno per voi?

risposto 10 anni fa
Marco Grazia
X 0 X

Beh lo è ma noi programmatori non possiamo accedere ai dati di sistema! Per motivi di sicurezza dicono.

risposto 10 anni fa
ulisse
X 0 X

Due cose: :D sulla sicurezza potrei anche essere daccordo, ma basta fare una richiesta all'amministratore del server e lui ti da ciò che chiedi, se io non facessi così non avrei più clienti da un po'.

Certo dipende molto dall'importanza che riveste la richiesta, dato che sui log ci possono essere anche dati sensibili, ma insomma, basta fare la richiesta nel modo giusto, ovvero nel tuo caso, spiegare il problema e chiedere se hanno problemi con l'invio di email e fatti dire se il giorno x all'ora y quali problemi hanno avuto, dato che non riuscivi a inviare quell'email.

Altra cosa: Povero Watson, era dislessico e questo gli creava dei seri problemi, uno di questi era l'insicurezza, le sue affermazioni sono famose, e molte sono rimaste celebri: "come l'impiegato è figlio dell'azienda, che è sua madre", o il motto di IBM: "think!" ovvero pensa!

risposto 10 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda