Newsgroup: it.comp.os.linux.sys
Titolo: crontab o ciclo while?

Devo scrivere uno script che, ogni minuto, controlla una tabella di un
database e se sono presenti certi record esegue determinate operazioni.
Mi chiedevo se, dal punto di vista dell'impatto sulle prestazioni del
sistema, conviene lanciare lo script da crontab ogni minuto o se conviene
inserire nello stesso un ciclo while che esegue l'operazione, aspetta un
minuto, esegue l'operazione, ecc. a mo' di demone per intenderci.
In questo secondo caso una connessione persistente al db credo sia da
preferire.
Grazie e ciao,
Mario
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 e' in cron rischi di avere 'n' istanze in esecuzione sugli stessi record.
Effettivamente è il dubbio che ho avut anch'io.


 
Puoi sempre creare un file di lock, eseguire lo script e cancellare il lock.
Se il lock esiste lo script si ferma al volo
-- 
Roberto Tagliaferri-Linux user #30785 <-> r.tagliaferri@(forse)
tosnet.it
Io, del giornale leggo sempre i necrologi e i cinema.  Se e' morto
qualcuno che conosco, vado al funerale.  Se no vado al cinema.
		-- Walter Waldi

 Se il lock esiste lo script si ferma al volo
Anche. Ma a questo punto, escludendo il problema dell'esecuzione
contemporanea di più istanze, conviene usare crontab o il ciclo while ? O
è indifferente ?
Tenuto conto che con il ciclo while eviteri continue connessioni al db,
creandone una persistente, io propenderei per questa soluzione...


 creandone una persistente, io propenderei per questa soluzione...
E se la connessione di cade? Rischi che lo script dia errore e termini.
Personalmente metterei a crontab e userei il file di lock.
Una connessione al minuto su un DB non è nulla, nemmeno se il DB fosse
un Oracle su un 486 con 64 MB di ram, quindi dal punto di vista delle
performance non vi sono diversità apprezzabili tra i due approcci.
Di contro se usi il ciclo while devi cominciare a gestire
correttamente gli errori di connessione e le riconnessioni, il fatto
che lo script debba essere sempre attivo (quindi metterlo in inittab o
con qualcosa tipo daemon), devi gestire i tempi di esecuzione (se deve
girare ogni minuto il wait deve essere accorciato del tempo di
esecuzione della query) ecc.ecc.
A crontab devi solo gestire un file di lock e la query; anche la mail
in caso di errore viene inviata direttamente da crond, basta che spari
qualcosa in output e ricevi il messaggio nella tua casella di posta.
Molto più semplice e meno prono ad errori.

 database e se sono presenti certi record esegue determinate operazioni.
Oltre a quello che ti hanno suggerito, vedi anche di trovare una
informaizone su quel "coso" che si chiama dnotify e per fare ste cose è una
figata.
Max

 Max
dnotify non esegue monitoraggio solo su directory? O esiste anche una
versione per db.


 Molto più semplice e meno prono ad errori.
Buone argomentazioni.
Grazie,


 Mario
Directory o files.
Non è difficile da una applicazione fare un touch di un file, crearlo o
cancellarlo.
Analogamente non è difficile da un DB mediamente sofisticato, fare la
stessa cosa.
Ed ecco che hai un ottimo modo per lanciare un programma allo scatenarsi di
un evento che fa qualcosa sul filesystem in posti predefiniti.
Max

 
La butto li: perche' non passi a un DB che usa i trigger?
firebird ad esempio. Quanto a mysql le ultime versioni dovrebbero 
supportare i trigger, ma non so se si tratta di versioni stabili.
-- 
il capitano dei carabinieri chiede a un appuntato: "quanto fa 1+1"
l'appuntato: "3"
I colleghi in coro "gli dia un'altra chance. Gli dia un'altra chance!"
Il capitano ci riprova. Quanto fa "2+1".
l'appuntato: "3"
I colleghi in coro "gli dia un'altra chance, gli dia un'altra chance!"