Una delle utility più importanti dei sistemi operativi UNIX based. Crontba è un utilissimo strumento che permette di schedulare qualsiasi operazione.
Fondamentale per i sistemi server, con crontab è possibile programmare ricorsivamente azioni quali:
- La pulizia dei log
- La generazione delle statistiche
- I backup periodici
In generale tutto quello che va fatto periodicamente sul vostro sistema.
I comandi principali
Ovviamente li lanceremo tutti da terminale:
- crontab -l: restituisce la lista di tutti i job schedulati
- crontab -r: rimuove tutti i job schedulati dall’utente
- crontab -e: apre l’editor per la modifica dei job (editor predefinito è nano)
Aggiungere una nuova attività a crontab
Come già detto il comando da utilizzare è "crontab -e". Si aprirà l’editor di testo nel quale inserirete tutte le istruzioni da dare. Una riga di crontab sarà più o meno qualcosa di simile:
Con questa istruzione faremo un dump del database, salvando l’output nella directory /home/utente. Importante è capire quando verrà fatta l’operazione: nel nostro caso verrà fatta ogni giorno 5 di qualsiasi mese alle 17:15.
I cinque valori che precedono l’istruzione sono da interpretare come segue:
- Il minuto dell’ora in cui effettuare l’operazione (0-59)
- L’ora in cui deve avvenire l’evento (0-23)
- Il giorno del mese (0-31, ma state attenti ai mesi con 30 gg ed a febbraio)
- Il mese dell’anno (1-12)
- Il giorno della settimana, cominciando a contare dalla domenica (0-6)
- Il carattere * (asterisco) va usato come jolly quando non si vuole determinare il parametro
Fate molta attenzione a che il concatenarsi dei parametri temporali non restituiscano una data impossibile!
Le 17:15 del 31 Febbraio non ci saranno MAI! D’altro canto è anche possibile settare più valori per uno stesso parametro:
L’evento si verificherà alle 17:15 di ogni domenica e mercoledi.
Dopo aver scritto nell’editor gli scheduling che ci servono, salviamo il file con CTRL+O ed usciamo con CTRL+X.
Carichiamo uno script
Una cosa molto comoda da fare è crearsi uno script di shell e lanciare quello via crontab. Il vantaggio è quello di poter caricare una sola istruzione di crontab ed eseguirne diverse in un sol colpo.
Facciamo un esempio. Creando il file backup.sh, andiamo a scrivere quanto segue:
#Inserisco la data nel nome dei file di output
DATE=`date +%Y%m%d`
#Faccio il dump del database
mysqldump <database> -u<utente> -p<password> | gzip -c – > /home/utente/backup/sql.$DATE.gz
#Creo un archivio con tutti i file del web
tar cfvz /home/utente/backup/backup.$DATE.tar.gz /home/web/directory/
exit
Dovremo solo ricordarci di rendere eseguibile lo script settando i permessi a 744. Poi, in crontab andremo ad inserire una regola facile facile:
Alle 2 e 2 minuti di ogni giorno, verrà fatto un backup del database mysql interessato e della directory che presumibilmente conterrà i file http.
Giusto un ultimo consiglio. Crontab trova la sua collocazione naturale per il settaggio delle operazioni di mantenimento di un sistema. Se impostate tali operazioni su un server pubblico, prima di decidere il quando, controllate il momento in cui avete mediamente meno accessi durante il giorno (di solito sono le ora notturne). In questo modo eviterete di intaccare le prestazioni del server e agli utenti sarà dato il minimo disagio 🙂
l’unico problema di crontab è che non puoi legare la schedulazione dei job successivi ai precedenti ma ha solo un trigger a tempo..
Per questo la cosa migliore è creare uno script che controlli il risultato dell’ultimo job e agisca di conseguenza.