# Configurazione e Gestione dei Cron Job

Source: https://support.kapsulehost.com/it-it/cron-jobs

A cron job esegue un comando secondo una pianificazione, in background, indipendentemente dal fatto che qualcuno stia visitando il tuo sito oppure no. Questa guida illustra come aggiungerne uno in KPanel, come scrivere correttamente la pianificazione e il comando per questa piattaforma, come sostituire lo scheduler integrato inaffidabile di WordPress e come trovare l'output quando un job non fa quello che ti aspettavi.

## Dove si trova Cron in KPanel

Cron appartiene a un sito, quindi vi si accede dal sito stesso e non dal menu principale:

1. Accedi a [KPanel](https://kpanel.kapsulehost.com) e fai clic su **Siti web** nella barra laterale sinistra.
2. Fai clic sul sito che desideri.
3. Nel menu del sito, apri **Impostazioni**, poi **Cron**.

L'indirizzo diretto è `/websites/<site-id>/cron`. Vedrai una tabella dei job esistenti, oppure uno stato vuoto se il sito non ne ha nessuno.

![La pagina Cron per un sito in KPanel, che elenca i job pianificati su quel sito](https://support.kapsulehost.com/help/screenshots/cron-jobs.13aef775.webp)

## Aggiungere un job

Fai clic su **Aggiungi Cron Job** in alto a destra. Il modulo ha tre campi.

### Pianificazione

Sei pulsanti preimpostati compilano l'espressione al posto tuo:

| Pulsante | Espressione |
|---|---|
| Ogni minuto | `* * * * *` |
| Ogni 5 min | `*/5 * * * *` |
| Ogni ora | `0 * * * *` |
| Giornaliero ore 2 | `0 2 * * *` |
| Settimanale domenica | `0 2 * * 0` |
| Mensile 1º | `0 2 1 * *` |

Oppure digita la tua personale in **Espressione cron**. I cinque campi, in ordine, sono minuto, ora, giorno del mese, mese, giorno della settimana:

```
minute  hour  day-of-month  month  day-of-week
```

- `0 3 * * *` viene eseguito alle 3:00 ogni giorno.
- `*/15 * * * *` viene eseguito ogni quindici minuti.
- `0 9 * * 1` viene eseguito alle 9:00 ogni lunedì.
- `30 1 1 * *` viene eseguito all'1:30 il primo di ogni mese.
- `0 */6 * * *` viene eseguito ogni sei ore, in punto.

### Etichetta

Un nome che riconoscerai in seguito, come `WordPress cron` o `Nightly stock sync`. È quello che la tabella dei job ti mostra, quindi rendilo descrittivo: `job 3` non aiuta nessuno alle 2 di notte.

### Comando

Il comando della shell da eseguire. Fai clic su **Save** per creare il job.

> **Warning:** Usa percorsi completi. Cron viene eseguito con un ambiente minimo e senza il tuo profilo shell, quindi un semplice `php` o una directory relativa che funziona quando sei collegato via SSH qui fallirà silenziosamente. Scrivi sempre il percorso completo.

## Scrivere il comando

I job vengono eseguiti come l'utente di sistema del tuo sito, quindi la tua home directory è l'ancoraggio giusto e `~` si risolve correttamente. I file del tuo sito si trovano in:

```
~/htdocs/yourdomain.co.nz
```

Puoi verificare il percorso esatto nella scheda **Impostazioni**, poi **SFTP** del sito, che lo mostra sotto **File del sito**.

Comandi tipici:

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
```

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/php bin/send-queued-emails.php
```

```
/usr/bin/curl -fsS https://yourdomain.co.nz/api/nightly-report
```

> **Tip:** Testa il comando prima di pianificarlo. Incollalo nella sezione **WordPress**, poi **Console** del sito se si tratta di un comando `wp`, oppure eseguilo via SSH. Un job che non avrebbe mai funzionato è molto più facile da individuare al prompt che non alle 3 di notte in un file di log.

## Sostituire lo scheduler integrato di WordPress

WordPress viene fornito con un proprio pseudo-scheduler, WP-Cron, che si attiva solo quando qualcuno carica una pagina. Su un sito poco frequentato, gli articoli pianificati vengono pubblicati in ritardo e le email si accumulano senza essere inviate. Su un sito molto frequentato, ogni visitatore paga il costo del controllo della pianificazione.

Un vero cron job risolve entrambi i problemi. KPanel esegue l'intera sostituzione al posto tuo:

1. Apri il sito, poi la scheda **WordPress**.
2. Apri la sezione **WP-Cron**.
3. Fai clic su **Abilita cron di sistema**.

Questo aggiunge una pianificazione che esegue WP-Cron ogni cinque minuti e imposta `DISABLE_WP_CRON` in modo che i caricamenti di pagina smettano anch'essi di attivarlo. **Rimuovi cron di sistema** nella stessa schermata annulla entrambe le operazioni.

Se preferisci farlo manualmente, sono due passaggi:

**Disabilita la versione attivata dal visitatore.** Aggiungi questo a `wp-config.php`, sopra la riga `/* That's all, stop editing! */`, usando **Impostazioni**, poi **Gestore file**:

```php
define( 'DISABLE_WP_CRON', true );
```

**Aggiungi il job reale.** In **Impostazioni**, poi **Cron**:

- Pianificazione: `*/5 * * * *`
- Etichetta: `WordPress cron`
- Comando: `cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now`

> **Warning:** Non saltare la metà relativa a `DISABLE_WP_CRON`. Con entrambe in esecuzione, ogni attività pianificata può attivarsi due volte: email duplicate, elaborazione ordini duplicata, addebiti duplicati su un plugin di abbonamento. Usa l'azione con un clic nella sezione WP-Cron e questo non potrà accaderti.

## WooCommerce e code in background

WooCommerce utilizza una coda in background per i cambi di stato degli ordini, i rinnovi degli abbonamenti, le email e gli aggiornamenti dello stock. Si basa su WP-Cron, quindi è esattamente il carico di lavoro che soffre su uno shop poco frequentato.

Una volta impostata la pianificazione reale, la coda viene elaborata ogni cinque minuti. Osservala in **WooCommerce**, poi **Status**, poi **Scheduled Actions** nel wp-admin.

Uno shop ad alto volume può passare a `*/2 * * * *`. Scendere oltre di solito non aiuta: si finisce per spendere più tempo ad avviare i processi che a lavorare. Vedi [Configurare WooCommerce](https://support.kapsulehost.com/it-it/wordpress-woocommerce).

## Gestire i job esistenti

La tabella dei job mostra **Label**, **Schedule**, **Command**, **Ultima esecuzione** e **Status**, con due azioni su ogni riga:

- **Disable** mette in pausa un job senza eliminarlo, e diventa **Enable** per riattivarlo. Usa questa opzione quando stai verificando se un job sta causando un problema.
- **Delete** lo rimuove definitivamente. Ti verrà chiesta conferma, e le esecuzioni pianificate si fermano immediatamente.

> **Important:** L'eliminazione di un cron job non può essere annullata. La pianificazione viene rimossa dal server in quel momento. Se stai solo cercando di fermarlo temporaneamente, usa **Disable**.

## Trovare l'output

Ogni job creato da KapsuleHost ha il proprio output catturato automaticamente per te. L'output standard e gli errori vengono aggiunti a un file di log in una directory `cron-logs` nella home directory dell'utente del tuo sito, un file per job.

Quel log è la risposta a quasi ogni domanda del tipo "il mio job è stato eseguito?", perché registra ciò che il comando ha stampato e qualsiasi errore sollevato.

Per leggerlo, connettiti via SSH e guarda in `~/cron-logs/`. SSH utilizza l'autenticazione a chiave, quindi aggiungi prima la tua chiave pubblica dalla scheda **Impostazioni**, poi **Chiavi SSH** del sito: vedi [Aggiungere chiavi SSH](https://support.kapsulehost.com/it-it/adding-ssh-keys).

> **Note:** Gli account del Gestore file e SFTP sono confinati alla directory del tuo sito, `~/htdocs/yourdomain.co.nz`, e `cron-logs` si trova un livello più in alto. Questo è intenzionale: tiene un collaboratore con accesso SFTP fuori da tutto tranne il sito web. Usa SSH nativo per raggiungere i log, oppure reindirizza l'output nella directory del tuo sito come mostrato di seguito.

Se preferisci avere l'output in un punto che il Gestore file possa aprire, reindirizzalo tu stesso:

```
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now >> ~/htdocs/yourdomain.co.nz/wp-content/cron.log 2>&1
```

`2>&1` invia gli errori allo stesso file dell'output normale. Senza di esso, gli errori non vanno da nessuna parte.

> **Warning:** Qualsiasi cosa all'interno della directory del tuo sito può potenzialmente essere richiesta via web. Metti un log reindirizzato sotto `wp-content` anziché alla radice del sito, dagli un nome che nessuno indovinerebbe, ed eliminalo una volta terminato il debug.

## Buone pratiche

- **Scagliona le tue pianificazioni.** Sei job tutti impostati su `0 2 * * *` partono tutti insieme. Distribuiscili: `0 2`, `10 2`, `20 2`.
- **Non usare ogni minuto a meno che tu non ne abbia davvero bisogno.** `*/5` è sufficiente per quasi tutto, incluso WordPress e WooCommerce.
- **Mantieni i job brevi.** Un job che impiega più tempo del suo intervallo si sovrapporrà all'esecuzione successiva.
- **Reindirizza l'output per qualsiasi job rumoroso**, in modo che un job eccessivamente prolisso non riempia il tuo disco.
- **Rivedi la lista di tanto in tanto.** I job lasciati da un plugin che hai rimosso continuano a essere eseguiti.

## Risoluzione dei problemi

**Il job non sembra mai essere eseguito.** Controlla prima il percorso. Apri il file di log. Poi conferma che lo stato sia **Active** e non **Disabled**. Poi esegui lo stesso comando via SSH e guarda cosa dice.

**"command not found" nel log.** Manca un percorso completo. Usa `/usr/bin/php`, `/usr/bin/wp`, `/usr/bin/curl` anziché il nome semplice.

**Permesso negato.** Il job viene eseguito come l'utente di sistema del tuo sito. Quell'utente deve possedere, o quantomeno poter leggere, tutto ciò che il comando tocca. Controlla i permessi in [Usare il Gestore file](https://support.kapsulehost.com/it-it/file-manager).

**Le attività di WordPress vengono ancora eseguite in ritardo.** Conferma che entrambe le metà della sostituzione siano in atto: la pianificazione esiste in **Impostazioni**, poi **Cron**, e `DISABLE_WP_CRON` è impostato. La sezione **WP-Cron** nella scheda **WordPress** mostra lo stato attuale di entrambi.

**Il job viene eseguito ma il sito è lento mentre lo fa.** Spostalo in un orario più tranquillo, oppure suddividi il lavoro in blocchi più piccoli. L'uso delle risorse a livello di sito è visibile in **Prestazioni**: vedi [Migliorare la velocità del sito web](https://support.kapsulehost.com/it-it/website-speed).

**Un job ha smesso di funzionare dopo l'aggiornamento di un plugin.** Il percorso del comando potrebbe essere cambiato. Controlla il log, poi aggiorna il comando dalla tabella dei job eliminando quello vecchio e aggiungendone uno corretto.
