Come configurare i cron-job con i crontabs

Disponete di un hosting per il vostro sito e volete eseguire delle operazioni periodiche prefissate, ad esempio check del database, backup, controlli di vario genere, invio di email e così via? Il vantaggio dei cron-job è che possono configurarsi sia da cPanel (sugli hosting PHP è solitamente sempre possibile sfruttarli) sia, avendo un VPS (Virtual Private Server), mediante shell ssh. È quest’ultimo il caso che andremo a considerare, in quanto la sintassi utilizzata è sostanzialmente la stessa in entrambe le interfaccie.

Programmare delle azioni predefinite

Cron viene lanciato in background all’avvio del sistema dallo script /etc/init.d/cron a cui punta il link presente in /etc/rc2.d/, ovvero non dovreste di norma aver bisogno di lanciarlo “a mano”. Tutti i job di ogni voce (crontab) vengono caricati in memoria, mentre le operazioni si possono effettuare via shell ssh, ovvero vi loggate da PuTTY oppure con il terminale:

ssh root@IP

inserite la vostra password di root e, nel caso di Ubuntu/Debian, potete andare ad agire direttamente sul cosiddetto crontab: infatti

crontab -l

mostra le azioni di cron attive, mentre

crontab -e

vi farà editare la tabella dei cron direttamente (il funzionamento dell’editor è tipicamente quello di pico).

La sintassi generica è:

crontab [-u user] file

Per vedere i log dei cron-job della vostra VPS basta digitare:

grep CRON /var/log/syslog

per vedere tutte le corrispondenze (in termini di cron di sistema).

Un esempio: controllare se MySql sia sempre attivo

Mi capitava spesso di verificare che un sito in wordpress avesse MySql che tendeva a “cadere” dopo un certo periodo (problema di configurazione): cosa fare per evitare disagi al cliente? Per quanto sia una soluzione spartana in certe situazioni, è possibile sfruttare i cron-job per costringere il sistema ad es. a riavviare MySql qualora venga rilevato come inattivo:

## check mysql ogni 15 minuti: se è offline riattivalo
0,15,30,45 * * * * service mysql status || service mysql restart

Il che significa: se mysql status restituisce false, scatta in automatico il restart, altrimenti non succede nulla, e tutot questo avviene in modalità sincrona, ogni 15 minuti come abbiamo scritto. Ovviamente il tutto non è certo il massimo dell’efficenza (specie se ogni 15 minuti utilizzate processi che fanno molto I/O oppure ad elevata complessità spazio-temporale), in quanto potremmo agire, in alternativa, in modalità asincrona, ovvero solo “on demand“, o se preferite al verificarsi di una certa condizione (cosa che esula dagli scopi di questo tutorial).

Cron-job: due tipologie, di sistema e “ad uso utente”

In generale i sistemi Linux (nel caso dei miei test, Debian) prevedono l’uso sia di cron-job di sistema (prioritari rispetto al resto) che ad uso utente: ovviamente molto cambia a livello di permessi e “visibilità” per l’uno e per l’altro, e tutto dipende da cosa dovete gestire.  In generale comunque l’idea è quella di usare una stringa di simboli per rappresentare la temporalità (ovvero “ogni quanto” agire) e subito dopo si inserisce lo script, che potrebbe essere un file PHP come, ad esempio, uno script shell bash.

Formato dei cron-tab

Solitamente il formato della stringa “temporale” è il seguente:

MIN ORA GIORNO MESE GIORNO_SETTIMANA COMANDO

ovvero:

  1. MIN = minuti [1-60]
  2. ORA = orario [1-24]
  3. GIORNO = giorni [1-31]
  4. MESE = mese [1-12]
  5. GIORNO_SETTIMANA = 1=Sunday, 2=Monday, …

Alcuni esempi pratici saranno, credo, d’aiuto a capire di cosa parliamo.

0 0 * * *          -- ogni giorno a mezzanotte
0 0 * * 1-5        -- ogni giorno lavorativo a mezzanotte
0 0 1,15 * *       -- ogni 1 e 15 del mese a mezzanotte
0 0 1 * 5          -- ogni 1 del mese ed ogni venerdì a mezzanotte

* * * * * comando    #esegui ogni minuto
30 * * * * comando   #esegui ogni mezz'ora
45 6 * * * comando   #esegui alle 6:45 ogni giorno
45 18 * * * comando  #esegui alle 18:45 ogni giorno
00 1 * * 0 comando   #esegui alle 1:00 AM ogni Domenica
00 1 * * 7 comando   #esegui alle 1:00 AM ogni Lunedì
00 1 * * Sun comando #esegui alle 1:00 AM ogni Lunedì
30 8 1 * * comando   #esegui alle 8:30 il primo giorno di ogni mese

Altri esempi pratici

Backup due volte al giorno:

00 11,16 * * * /home/user123/bin/incremental-backup

Ogni giorno in orario di lavoro:

00 09-18 * * * /home/user123/bin/check-db-status

Ogni giorno in orario di lavoro da lunedì a venerdì:

00 09-18 * * 1-5 /home/user123/bin/check-db-status

 Immagine tratta da : creepypasta

Ti piace questo articolo?

0 voti

Su Trovalost.it puntiamo sulla qualità dei contenuti da quando siamo nati: la tua sincera valutazione può aiutarci a migliorare ogni giorno.

Come configurare i cron-job con i crontabs

Disponete di un hosting per il vostro sito e volete …
0 0 utenti hanno votato questa pagina

Ti potrebbero interessare (Guide per webmaster):

Cerca altro nel sito

Clicca sul box, e scegli la sezione per vederne i contenuti.

Come configurare i cron-job con i crontabs

Disponete di un hosting per il vostro sito e volete …
0 0 utenti hanno votato questa pagina