Spesso, sopratutto su siti web di e-commerce, abbiamo la necessità di eseguire automaticamente e in un determinato momento alcune operazioni molto importanti come, ad esempio, creare un backup del database oppure importare nel catalogo i nuovi prodotti.
In questo articolo vediamo come il crontab di linux ed il Plesk Panel possono aiutarci a soddisfare queste esigenze, evitandoci di procedere manualmente e quindi ottimizzando il nostro (tempo di) lavoro.
Cos’è il crontab?
Il crontab deriva da crond, ovvero il demone – cioè un servizio che viene eseguito in background – che sui sistemi UNIX (e derivati) controlla ed esegue i task pianificati detti anche cronjobs.
Ok, ma come fa il crond a sapere esattamente cosa deve eseguire e (soprattutto) quando?
All’interno di ogni cronjob è possibile configurare una temporizzazione, ovvero stabilire i seguenti parametri:
- minuto (0 – 59)
- ora (0 – 23)
- giorno del mese (1 – 31)
- mese (1 – 12)
- giorno della settimana (0 – 6)
All’interno del cronjob è inoltre possibile definire, con la direttiva MAILTO, l’indirizzo e-mail al quale inviare notifica in caso di eventuali errori di sintassi, reportistica del cronjob, etc…
Invece nel caso volessimo disattivare tale notifica, basterà reindirizzare lo standard output (stdout) su /dev/null e lo standard error (stderr) su stdin, aggiungendo in coda al comando da eseguire le seguenti istruzioni:
> /dev/null 2>&1
Un caso pratico del funzionamento del Crontab
Supponiamo di dover creare automaticamente un backup del nostro database ogni 5 minuti. Useremo, tramite crontab, il comando mysqldump che ci consente di salvare in formato SQL il nostro database.
Questi sono i dati del DB da salvare:
Nome DB: db01
Utente: utente_db01
Password: 1Wv73.Q$
Colleghiamoci al Plesk Panel, andiamo all’interno dell’iscrizione che contiene il nostro Database e clicchiamo su Attività pianificate:
clicchiamo su Impostazioni per inserire l’indirizzo e-mail a cui inviare le notifiche del crontab:
clicchiamo su Aggiungi attività per inserire gli elementi che caratterizzano la temporizzazione del crontab ed i relativi comandi da eseguire e clicchiamo su ok:
Dopo aver dato conferma, il crontab verrà installato e saremo riportati sulla pagina che ci mostra il cronjob per esteso:
Poiché mentre scrivevo questo articolo la mia indole da sistemista ha preso il sopravvento, ho aggiunto anche un altro paio di direttive al cronjob che è diventato così:
SHELL=/bin/bash
MAILTO=f.leo@flamenetworks.com
*/5 * * * * date=`date “+\%Y-\%m-\%d-\%H-\%M-\%S”` ; mysqldump -u utente_db1 -p1Wv73.Q$ db1 > ~/httpdocs/backup/backup-db1-$date.sql ; bzip2 ~/httpdocs/backup/backup-db1-$date.sql
SHELL indica la shell da utilizzare per eseguire il cronjob, in questo caso bash
Con MAILTO definiamo, come accennato poco fa, l’indirizzo e-mail al quale inviare le notifiche del cronjob
Poi il cronjob vero e proprio che, ogni 5 minuti, esegue il dump SQL del nostro database, lo salva nella directory backup e, infine, comprime il backup con bzip2.
Et voilà, ecco a voi il dump del nostro database:
root@vps:~# ls -l /var/www/vhosts/flamenetworks.com/httpdocs/backup/
totale 4368
-rw-r–r– 1 flame psacln 744906 feb 27 18:15 backup-db1-2015-02-27-18-15-01.sql.bz2
-rw-r–r– 1 flame psacln 744924 feb 27 18:20 backup-db1-2015-02-27-18-20-01.sql.bz2
-rw-r–r– 1 flame psacln 744899 feb 27 18:25 backup-db1-2015-02-27-18-25-01.sql.bz2
-rw-r–r– 1 flame psacln 744884 feb 27 18:30 backup-db1-2015-02-27-18-30-01.sql.bz2
-rw-r–r– 1 flame psacln 744913 feb 27 18:35 backup-db1-2015-02-27-18-35-01.sql.bz2
-rw-r–r– 1 flame psacln 744826 feb 27 18:40 backup-db1-2015-02-27-18-40-01.sql.bz2
root@vps:~#
Come vedete il file viene creato ogni 5 minuti, contiene la data ed è compresso per non occupare troppo spazio sul disco.
Magari nel prossimo articolo vi parlerò di come effettuare l’importazione del database, partendo dal backup SQL che abbiamo appena creato. 🙂