Forum Noamweb
Non sei collegato [Login - Registrati]
Vai alla fine

Versione per la stampa  
Autore: Oggetto: Guida ai crontab
Aulenta
Moderatore
******


Avatar


Risposte: 934
Registrato il: 5/10/2004
Utente offline


[*] Inviato il 7/9/2006 at 09:51
Guida ai crontab


Salve,

il comando crontab consente lo scheduling di comandi, ovvero consente di registrarli presso il sistema affinché siano poi mandati in esecuzione periodicamente. Lo stesso nome "crontab" si riferisce anche ai file utilizzati dal comando crontab come "registri" dei comandi "schedulati".
Sicuramente sono molto utili tuttavia è importante utilizzarli correttamente perchè funzionino. A tale proprosito vi segnaliamo una guida in italiano al loro utilizzo:
http://www.diludovico.it/guide/cron.shtml
e qui trovate una utility per crearli in maniera automatizzata:
http://www.diludovico.it/guide/creacrontab.shtml
utile anche la definizione di Wikipedia con alcuni esempi e consigli:
http://it.wikipedia.org/wiki/Crontab

:saluto:




http://www.noamweb.com
Hosting, housing e registrazione domini
View User's Profile Visita la pagina dell utente Scorri tutte le risposte per utente
Aulenta
Moderatore
******


Avatar


Risposte: 934
Registrato il: 5/10/2004
Utente offline


[*] Inviato il 26/10/2006 at 15:56


Poichè il sito http://www.diludovico.it/guide/cron.shtml è in rifacimento, posto qui i suoi contenuti:

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

Crontab e file PHP

I file si dividono in file eseguibili, che contengono codice, e file di dati, che contengono solo informazioni. Un file php è solo un file di testo e non è in grado di
eseguire sè stesso. Per interpretare il codice contenuto in quel file di testo devi usare un browser, e devi dire al browser di caricare quel file PHP.

Soluzione: cambia la tua riga in modo che il crontab lanci lynx e fagli "visitare" la tua pagina php. I file PHP vengono interpretari dall'apposito interprete, che a sua volta è lanciato dal server HTTP. Quindi dai a lynx l'intero URL "http://".

Un esempio potrebbe essere:
0 * * * * /usr/bin/lynx http://www.dominio.estensione/dir/file.php

Ovviamente lynx deve essere installato sul server. In alternativa prova con il comando wget

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.

Crontab via Pannello di controllo:

Alcuni pannelli di controllo (CPanel, ad esempio), hanno un'interfaccia che semplifica molto l'impostazione.




http://www.noamweb.com
Hosting, housing e registrazione domini
View User's Profile Visita la pagina dell utente Scorri tutte le risposte per utente
Aulenta
Moderatore
******


Avatar


Risposte: 934
Registrato il: 5/10/2004
Utente offline


[*] Inviato il 26/10/2006 at 16:00


altra guida, presente all'url http://www.freeonline.org/articolo_linux_dtml/a-37/ e http://www.freeonline.org/articolo_linux_dtml/a-38/
che vi riportiamo:

Introduzione al servizio Scheduling di CronTab I
di Luca Bove (PuntoWeb.Net Srl)


Alcuni processi devono essere eseguiti a determinati orari, un determinato numero di volte. Esempi di questi possono essere i processi di backup che vengono lanciati ogni notte, oppure un analizzatore di log che deve girare ogni minuto.
Questi processi devono girare un certo numero di volte oppure in determinati giorni; il resto del tempo essi stanno fermi fino a quando un utente non interagisce con essi e li richiama (con gli appositi comandi). Qui è dove il CRON si rende utile. Vi permette di programmare (o "schedulare", come si dice in gergo) l'esecuzione di un lavoro in qualsiasi momento desideriate, ogni minuto, ogni ora, giornalmente, mensilmente.
E' un sollievo sapere che ci sono vari programmi che stanno girando senza alcun bisogno della vostra supervisione.

Le Basi
Cron può essere fatto partire da rc o da rc.local e ritorna immediatamente al prompt, sicchè non c'é bisogno di lanciarlo in background. Cron ricerca il file /etc/crontab per le voci (le cosiddette "entry") di sistema e /var/spool/cron per le voci relative agli utenti che si trovano nel file /etc/passwd. Tutte le voci ritrovate sono caricate in memoria.
Tutto ciò viene ripetuto ogni minuto appena cron "si sveglia" ed esegue diversi compiti:
a) ricerca le voci ed esegue i programmi che sono stati schedulati.
b) determina se il modtime (vale a dire la data e l'ora dell'ultima modifica) nella directory di cron è cambiato c) se il modtime nella directory cron è cambiato, cron ricerca tutti i file e ricarica i programmi che sono stati modificati.

Poiché cron cerca le modifiche ogni minuto, non è necessario farlo ripartire quando sono stati effettuati dei cambiamenti (editati) nei file nella directory cron.


Utilizzare crontab
Il "cron daemon" legge il file "crontab"; ogni utente può avere la propria versione di questo file, orientata agli specifici compiti che si vogliono eseguire. I flag associati con le applicazioni crontab specificano quando aprire crontab per avere la lista o per rimuovere e modificare compiti.

La sintassi per il programma crontab è la seguente:

crontab [-u user] file
crontab [-u user] -l -e -r

Questi parametri indicano: -u questa opzione comunica al sistema il nome dell'utente che "possiede" il file. Se l'opzione -u è omessa, il sistema deduce per default che state usando il vostro crontab personale.
Il comando switch user (su) può confondere il crontab, così se siete nello switch "su" assicuratevi di utilizzare l'opzione -u.
-l questa opzione dice a crontab di elencare i file nello standard output, in poche parole visualizza il file.
-e questa opzione dice a crontab di editare il file. Cron usa l'editor definito dalla variabile EDITOR o da VISUAL. Se nessuna di queste variabili è definita, parte in automatico l'editor "vi". Quando si esce dall'editor, è immediamente piazzato nella locazione corretta e viene aggiornato il campo data/ora.
-r questa opzione rimuove il file crontab specificato, se nessun file viene specificato, rimuove il file crontab dell'utente.

Introduzione al servizio Scheduling di CronTab II
di Luca Bove (PuntoWeb.Net Srl)


--Voci in Crontab--
Solo 2 tipi di voci sono permesse nel crontab: i settaggi ambientali (Crontab Environmental settings) e i settaggi di comando (Crontab Command settings)

a) Crontab Environmental settings
I settaggi ambientali utilizzano la seguente forma:

nome = valore

Cron conosce già le diverse variabili ambientali. Per esempio, SHELL è settato a /bin/bash.
Altre variabili ambientali, come LOGNAME e HOME, sono associate al possessore del file. SHELL e HOME posso essere sovrascritte nello script, mentre non è possibile farlo con LOGNAME. Se MAILTO è definito (e non è settato a " "), tale variabile è inserita in una riga nel file crontab, e spedisce ogni messaggio generato all'utente specificato in questo campo.
La seguente riga mostra MAILTO settato ad uno specifico utente (luca): # spedisce tutti gli output all'utente *luca* (non importa chi è il proprietario di questo crontab)
MAILTO=luca

b) Crontab Command settings
I settaggi comandi usano un formato standard: ogni riga inizia con cinque campi ora/data. Se è il crontab di sistema, il campo successivo è lo username associato con la voce. Il campo seguente sarà il comando da eseguire. Il comando verrà eseguito solo quando la data e l'ora corrente coincideranno con tutti i valori dei campi time/date del crontab. Nel paragrafo succ. vi è un esempio.

I campi disponibili per la data e l'ora sono i seguenti:

Campi | Valori ammessi
----------------
minuti | 0-59
ore | 0-23
giorno | 1-31
mese | 1-12
giorno della settimana | 0-7 (0 & 7 indicano la domenica)

Questi campi possono anche contenere un asterisco (*) invece di un numero. Un asterisco indica che ogni possibile valore è ammesso.

--Dettagli---
La righe seguenti mostrano il /etc/crontab installato per default nella RedHat 6.2:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Avete notato come crontab chiama i quattro diversi eventi?
Il primo è associato ad eventi orari (eseguiti nel primo minuto di ogni ora)
Il secondo è associato ad eventi giornalieri (eseguiti alle ore 4:02 di ogni giorno)
Il terzo è associato ad eventi settimanali (eseguiti alle 4:22 di ogni domenica)
L'ultimo è associato ad eventi mensili (eseguiti alle 4:42 nel primo giorno di ogni mese).

Qualcosa da ricordare:
Il sistema non va indietro e raccoglie i lavori cron, esso li esegue solo se la data e l'ora sono uguali alla voce nel file. Ad esempio se il computer è spento quando dovrebbe essere eseguito il cron, quel programma non viene più eseguito.

Permessi e divieti di accesso al servizio crontab
Ci sono due file che abilitano la root (solo la root dovrebbe avere il permesso di editare o creare questi file) per autorizzare o vietare l'utilizzo dei servizi crontab agli utenti; essi sono: /etc/cron.allow -- Questo file in genere non esiste, lo dovete creare. Ogni voce che piazzerete in questo file coprirà quella inserita in /etc/cron.deny. Se il file /etc/cron.allow esiste, solo gli utenti specificati dentro posso usufruire del servizio crontab.
/etc/cron.deny -- Questo file esiste per default. In esso, ci metterete lo username delle persone a cui vietate l'utilizzo del servizio crontab.




http://www.noamweb.com
Hosting, housing e registrazione domini
View User's Profile Visita la pagina dell utente Scorri tutte le risposte per utente

  Vai all'inizio

Powered by XMB 1.9.11
XMB Forum Software © 2001-2012 The XMB Group