sabato 9 marzo 2013

COSA SONO I CRONTAB


CRONTAB, LINUX







IN QUESTA GUIDA VEDREMO COSA SONO I CRONTAB E COME UTILIZZARLI 





Cos'è "Cron/Crontab" ???

* una risposta alle preghiere dei webmaster
* una specie di sveglia per il server
* uno strumento per la manutenzione automatica

Requisiti:

* un server che consenta di eseguire cron job
* accesso via telnet/ssh al server

Quando serve:

* offri un servizio di cartoline virtuali, ed i tuoi utenti possono
scegliere di mandare le cartoline in una data futura? Avrai il problema di
eseguire lo script almeno una volta al giorno in modo che, se ci sono degli
invii "in scadenza", le mail vengano inviate;
* hai un motore di ricerca interno ed aggiungi del materiale in
continuazione? Dover lanciare lo spider ogni volta che qualcosa viene pubblicato
per tenere aggiornato il database è un'inutile perdita di tempo. Inoltre
potresti correre il rischio di dimenticartene.
* il tuo hoster non ti offre il servizio di backup, e quindi usi uno script
che fa il salvataggio di tutti i tuoi dati, ma non riesci sempre ad eseguirlo,
per cui ti manca la copia del tuo sito prima che degli hacker turchi hanno
rasato a zero il tuo forum?

Crontab risponde alle esigenze indicate poco fa e a tutte quelle che richiedano
l'esecuzione automatica di uno script ad intervalli di tempo, senza l'intervento
da parte tua.

Premessa

Un file crontab è più o meno una cosa del genere:
codice:
0 * * * * /etc/reset.cgi
0 0 * * * /etc/resetlogs.cgi

Cosa significa quanto sopra? E' molto semplice. Nell'esempio precedente c'è un
file crontab con 2 comandi. Un file crontab può contenere un numero qualsiasi di
comandi. E' molto importante che ci sia un solo comando per linea, per cui [ 0 *
* * * * /etc/reset.cgi ] sarà il sig. COMANDO UNO e [0 0 * * *
/etc/resetlogs.cgi ] sarà il sig. COMANDO DUE. Puoi avere i sigg. COMANDO TRE,
QUATTRO e così via. Quello che conta è che ci sia un solo comando per linea.
Altrettanto importante è che dopo l'ultimo comando ci sia una linea vuota, o
Crontab non funzionerà.

Ok, diamo un'occhiata a ciascun comando. Può tornare utile pensando alla
sveglia. Ogni comando infatti è come impostare un'allarme per una determinata
azione. I primi 5 campi specificano il tempo in cui il sesto campo verrà
eseguito.

I 5 campi iniziali rappresentano

MINUTI(0-59) ORE(0-23) GIORNODELMESE(1-31) MESEDELL'ANNO(1-12)
GIORNODELLASETTIMANA(0-6) Notabene: 0 = Domenica

Nota anche che l'asterisco (*), chiamato WILDCARD, che consente di non
specificare alcun valore per il campo in oggetto.

Se non fosse abbastanza, ecco degli esempi che dovrebbero rimuovere ogni
dubbio:

12 03 * * 1,4 /percorso/assoluto/per/la/webroot/cgibin/script.cgi

12: minuti [0-59]
03: ore [0-23]
*: giorno del mese [1-31]
*: mese [1-12]
1,4: giorno della settimana [0-6, con la domenica indicata da 0]
/script.cgi: comando [lo script da eseguire]
Traduzione: alle 3:12a.m., orario del server, ogni lunedì e giovedì, lo script
script.cgi verrà eseguito. Tu ronfi, il server lavora per te. Niente male,
vero?

Alcune variazioni sul tema
* tutte le mattine, più o meno alle 3?> 12 03 * * *
* tutti i 15 del mese, alla stessa ora?> 12 03 15 * *
* 7 volte l'anno, alla stessa ora?> 12 03 31 * * [solo 7 mesi hanno 31 giorni]
* ogni domenica, a mezzogiorno?> 0 12 * * 0
* ogni gorno, più o meno a mezzanotte?> 2 0 * * *
* ogni lunedì e venerdì, alle 3 del mattino circa?> 02 03 * * 1,5


Caricare ed eseguire i/l Crontab

Non importa come chiamerai il file crontab. Il consiglio è di chiamarlo in modo
che ti venga subito in mente di cosa si tratta (ad esempio: cronstats or
croncgi) ma non fa alcuna differenza.
Carica il file in modalità ASCII sul server.
Finito il l'upload, collegati al server via telnet/ssh e portati nella directory
in cui hai messo il file (anche in questo caso, non fa alcuna differenza dove
hai messo il file). Ti suggerisco di metterlo in una directory protetta o
all'interno della cgi-bin, in modo che nessuno possa vederlo. Sempre via
telnet/ssh, digita i seguenti comandi:
codice:
cd /percorso/per/la/directory/con/crontab
crontab nomedelfilecronotab


Se tutto è andato per il meglio, non dovresti accorgerti di nulla, a parte il
fatto che le cartoline vengono inviate, il database del motore aggiornato ed il
backup quotidiano non vede l'ora di essere scaricato.

Opzioni del crontab.

Comandi da digitare via ssh/telnet e spiegazione:

crontab -l verranno visualizzati i crontab in funzione (utile per
vedere se un comando è stato registrato correttamente);

crontab -r rimuove tutti i crontab registrati;

crontab -d da non fare mai, nemmeno per sbaglio: con questo comando
cancellate i job programmati anche del sistema;*

crontab -e scrivere o modificare un crontab direttamente via
telnet/ssh. L'editing risulterà un pochino "ostico" (per lo meno, io non ci sono
riuscito), per cui è consigliabile cambiare editor prima di far partire
crontab:
export VISUAL=nome_editor
ad esempio io uso pico per comodità e quindi:
export VISUAL=pico
crontab -e


Alcuni consigli:

* Procurati un foglio A4 bianco e ruotalo di 90°. Prendi una penna e scrivi
i giorni della settimana sul lato lungo, cominciando da domenica. Torna
all'inizio, e assegna ad ogni giorno un numero progressivo, cominciando da 0
(zero). Così facendo dovresti evitare di fare confusione quando imposterai
l'esecuzione dei comandi
* Se, come me, sei in hosting e non hai un server tutto tuo, usa una buona
dose di buon senso. Il modo migliore per sovraccaricare il server è quello di
impostare comandi in modo eccessivo, come ogni ora, mezz'ora o, peggio, ogni
quarto d'ora. Prova magari ad usare dei minuti "insoliti", tipo 02, 03, 17, 28,
etc. Se dovessi mostrare poca considerazione per il server, è molto probabile
che ti venga tolto il privilegio di usare crontab.
* Se hai uno script che impiega 5 minuti a fare il suo dovere, per sicurezza
pensa che ne impieghi 25.
* Sempre, assolutamente, in ogni caso, senza ombra di dubbio (è chiaro il
concetto???), usa il PERCORSO ASSOLUTO dello script. Così sei sicuro che tutto
verrà fatto nel migliore dei modi, e non incorrerai in errori di sorta.
* Suggerimento basato sull'esperienza: SEMPRE indicare i minuti. In modo più
chiaro, MAI usare wildcard (*) nel primo campo. Altrimenti lo script verrà
eseguito ogni minuto. Se, come nel mio caso, lo script prevede l'invio di mail,
non è bello svegliarsi la mattina e dover scaricare centinaia di mail tutte
uguali.


THE END!!!
mi raccomando cliccate sulla mia pubblicità  :) 

Nessun commento:

Posta un commento