Come configurare i cron-job di WordPress usando crontab

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.

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:

ssh [email protected]

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

Ads: V-Hosting è l'hosting italiano: scoprilo adesso
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:

  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, …
Ti potrebbe interessare:  Verifica che la directory madre sia scrivibile dal server: cosa significa e come risolvere

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



Questo blog pubblica contenuti ed offre servizi free da 11 anni. – Leggi un altro articolo a caso – Per informazioni contattaci
Non ha ancora votato nessuno.

Ti sembra utile o interessante? Vota e fammelo sapere.

Come configurare i cron-job di WordPress usando crontab
clock 611619 960 720
Torna su