Aggiornato il: 27-09-2022 12:40
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.
- 1) Programmare delle azioni predefinite sul server
- 2) Come controllare periodicamente se MySql è attivo (e in caso riavviarlo)
- 3) Cron-job: due tipologie, di sistema e “ad uso utente”
- 4) Formato dei cron-tab
- 5) Esempi pratici di cron (ogni giorno, ogni giorno lavorativo, ogni giorno specifico, …)
- 6) Configurare i cron job di WordPress via crontab di Linux
- 7) Altri esempi pratici da riutilizzare
Programmare delle azioni predefinite sul server
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:
PRT96919
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).
Come controllare periodicamente se MySql è attivo (e in caso riavviarlo)
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:
- MIN = minuti [1-60]
- ORA = orario [1-24]
- GIORNO = giorni [1-31]
- MESE = mese [1-12]
- GIORNO_SETTIMANA = 1=Sunday, 2=Monday, …
Esempi pratici di cron (ogni giorno, ogni giorno lavorativo, ogni giorno specifico, …)
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
Configurare i cron job di WordPress via crontab di Linux
Molto semplice!
Passo 1, editare il file wp-config.php ed impostare:
define('DISABLE_WP_CRON', true);
Passo 2, impostare un crontab di questo tipo:
# cronjob di WP, ogni mezz'ora */30 * * * * wget --delete-after https://trovalost.it/wp-cron.php
Potete anche sperimentare tempi di aggiornamento differenti, ma in genere si usano o crontab ogni mezz’ora oppure al massimo ogni ora. Metterli troppo frequenti rischia di compromettere la stabilità del server o sovraccaricarlo, mentre al contrario metterli troppo rari nella giornata rischia di mantenere WordPress non sincronizzato o non aggiornato.
Altri esempi pratici da riutilizzare
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

Ingegnere informatico per passione, consulente per necessità, docente di informatica; ho creato Trovalost.it e ho scritto quasi tutti i suoi contenuti. Credits immagini: pexels.com, pixabay.com, wikipedia.org, Midjourney, StarryAI, se non diversamente specificato. Questo sito non contiene necessariamente suggerimenti, pareri o endorsement da parte del proprietario del progetto e/o espressi a titolo personale. Per contatti clicca qui