# Pianificare cron job sul tuo server

> Esegui comandi sul tuo server a orari stabiliti con cron. Scegli una frequenza o un'espressione cron e l'utente, avvia subito un job e leggi il suo log.

La pagina **Scheduler** di un server gestisce i suoi job pianificati: comandi che cron esegue a orari stabiliti, ad esempio ogni minuto, ogni notte o il primo del mese. Usala per lo scheduler di Laravel, per script di pulizia, per report o per qualsiasi altra cosa che debba girare secondo una pianificazione e poi terminare.

Ogni job viene scritto in un file proprio in `/etc/cron.d` sul server, così i job si possono aggiungere e rimuovere in modo indipendente senza toccare il crontab di nessuno. Le pianificazioni seguono il fuso orario del server, mostrato in cima alla pagina e modificabile nelle [impostazioni del server](https://ops.vimonto.com/docs/it/servers/server-settings).

![La pagina Scheduler con i job predefiniti e un job dello scheduler di Laravel ogni minuto](https://ops.vimonto.com/docs-media/it/server-scheduler.webp?v=161e760d "Job pianificati su un server")

## Pianificare un job

1. Apri il server e scegli **Scheduler** nella barra laterale.
2. Clicca su **Pianifica job**.
3. Inserisci il **Comando**, ad esempio `php /home/vimonto/example.com/current/artisan schedule:run`.
4. Se vuoi, inserisci un **Nome** per riconoscere il job nell'elenco.
5. Scegli con quale utente gira in **Esegui come**: l'utente di sistema (`vimonto` per impostazione predefinita) o `root`.
6. Scegli **Quando** viene eseguito (vedi sotto).
7. Clicca su **Pianifica job**.

Il job appare come **Aggiunta in corso** finché il suo file cron non è stato scritto, poi viene eseguito al successivo orario pianificato.

Il comando gira tramite bash, quindi pipe, `&&` e variabili funzionano così come le scrivi. I caratteri speciali di cron, come `%`, non vanno preceduti da escape.

## Quali frequenze puoi scegliere?

| Frequenza | Espressione cron | Esecuzione |
| --- | --- | --- |
| **Ogni minuto** | `* * * * *` | Ogni minuto. |
| **Ogni ora** | `0 * * * *` | All'inizio di ogni ora. |
| **Ogni notte** | `0 0 * * *` | Ogni giorno a mezzanotte. |
| **Ogni settimana** | `0 0 * * 0` | Ogni domenica a mezzanotte. |
| **Ogni mese** | `0 0 1 * *` | Il primo di ogni mese a mezzanotte. |
| **All'avvio** | `@reboot` | Una volta, a ogni avvio del server. |
| **Pianificazione personalizzata** | la tua | Quello che inserisci in **Pianificazione**. |

### Scrivere un'espressione cron personalizzata

Scegli **Pianificazione personalizzata** e inserisci cinque campi in **Pianificazione**: minuto, ora, giorno del mese, mese e giorno della settimana. Ogni campo accetta `*`, un numero, un intervallo (`1-5`), un passo (`*/15`) ed elenchi separati da virgole.

| Espressione | Esecuzione |
| --- | --- |
| `*/15 * * * *` | Ogni 15 minuti. |
| `30 3 * * *` | Ogni notte alle 3:30. |
| `0 9 * * 1-5` | Alle 9:00 nei giorni feriali. |
| `0 */6 * * *` | Ogni sei ore. |
| `0 2 1,15 * *` | Alle 2:00 il giorno 1 e il giorno 15 del mese. |

Nomi come `MON` o `JAN` e scorciatoie come `@daily` non sono accettati in una pianificazione personalizzata; usa i numeri.

## Eseguire lo scheduler di Laravel

Lo scheduler di Laravel richiede un cron job che esegua `schedule:run` ogni minuto. Il modo più semplice è attivare lo scheduler per il sito nella sua pagina [queue e scheduler](https://ops.vimonto.com/docs/it/sites/queues-and-scheduler): Vimonto Deploy crea il job per te, con il percorso e l'utente giusti, e il job compare in questo elenco.

Per aggiungerlo invece a mano, pianifica questo comando **Ogni minuto** con l'utente di sistema:

```bash
php /home/vimonto/example.com/current/artisan schedule:run
```

Usa la directory `current` del sito, così il job esegue sempre il codice live. Un job creato così dal sito è contrassegnato con **Tramite Scheduler**; vedi [Job delle funzionalità del sito](#job-delle-funzionalita-del-sito).

## Eseguire subito un job

Apri il menu delle azioni (**⋯**) di un job e scegli **Esegui ora**. Il comando viene eseguito subito con l'utente del job, dalla home directory di quell'utente. Il suo output compare nel task nella pagina [attività](https://ops.vimonto.com/docs/it/organization/activity): è il modo più semplice per provare un nuovo job.

## Leggere il log

Fai clic su **Log** accanto a un job per vedere le ultime 300 righe stampate dalle sue esecuzioni pianificate (output standard ed errori insieme), recuperate dal server nel momento in cui fai clic. Ogni esecuzione aggiunge il suo output a `/var/log/vimonto/cron-{id}.log`, sotto una riga con la data e l'ora in cui è partita, ad esempio `--- 2026-10-07T03:30:00+02:00`. Un job che non stampa nulla lascia solo quella riga, così vedi comunque che è stato eseguito.

Una volta al giorno, un log più grande di 5 MB viene messo da parte: si conserva un file più vecchio e tutto ciò che è più vecchio viene eliminato, così un job prolisso non può riempire il disco. Il log viene eliminato quando rimuovi il job. L'output di **Esegui ora** non finisce nel log; lo trovi nel task nella pagina attività.


## Quali sono i job predefiniti?

Ogni server viene configurato con due job, contrassegnati come **Predefinito**:

| Job | Quando | Cosa fa |
| --- | --- | --- |
| Aggiorna Composer | **Ogni notte** | Aggiorna Composer all'ultima versione. |
| Rimuovi i pacchetti inutilizzati | **Ogni settimana** | Rimuove i pacchetti e i file di pacchetti in cache di cui il server non ha più bisogno. |

Entrambi girano come `root`. Puoi modificarli, eseguirli o rimuoverli come qualsiasi altro job.

## Modificare o rimuovere un job

Apri il menu delle azioni (**⋯**) e scegli **Modifica** per cambiare comando, nome, utente o pianificazione; **Salva** riscrive il file cron. Scegli **Rimuovi** per eliminare il job; non verrà più eseguito.

Se la scrittura di un job non riesce, il job mostra **Non riuscito**; scegli **Riprova** nel menu delle azioni.

### Job delle funzionalità del sito

I job creati da una [funzionalità del sito](https://ops.vimonto.com/docs/it/sites/site-features), come lo scheduler di Laravel o **Cron reale** per WordPress, hanno un badge **Tramite …**, ad esempio **Tramite Scheduler**. Qui puoi leggerne il **Log** ed eseguirli con **Esegui ora**, ma **Modifica**, **Riprova** e **Rimuovi** non sono disponibili: modificali tramite la funzionalità nell'intestazione del sito, e disattiva la funzionalità per rimuoverne il job.

## Sapere quando un job pianificato smette di girare

Cron non ti avvisa quando un job fallisce o smette di girare. Per questo usa un heartbeat: clicca su **Aggiungi heartbeat** nella pagina [monitoring](https://ops.vimonto.com/docs/it/servers/monitoring), poi fai chiamare al job l'URL dell'heartbeat quando termina, ad esempio chiudendo il comando con `&& curl -fsS https://…` (l'URL mostrato per l'heartbeat). Se il ping non arriva entro l'intervallo e il periodo di tolleranza che hai impostato, Vimonto Deploy invia un'email all'indirizzo in **Notifica a** e avvisa i membri dell'organizzazione, con una sola email per persona; vedi [chi riceve le notifiche](https://ops.vimonto.com/docs/it/servers/monitoring#chi-riceve-le-notifiche).

## Domande frequenti

### In quale fuso orario girano i job?

Nel fuso orario del server, mostrato in cima alla pagina **Scheduler**. Cambialo nelle [impostazioni del server](https://ops.vimonto.com/docs/it/servers/server-settings); i job seguiranno il nuovo fuso orario.

### Perché il mio job non viene eseguito?

Apri il suo **Log** per vedere cosa hanno stampato le ultime esecuzioni pianificate, oppure clicca su **Esegui ora** e leggi l'output nella pagina attività. Le cause comuni sono un percorso relativo (usa percorsi completi, oppure fai prima `cd` nella directory), un comando che richiede un altro utente, o una pianificazione personalizzata diversa da quella che intendevi. Cron usa un `PATH` ridotto (`/usr/local/sbin`, `/usr/local/bin`, `/usr/sbin`, `/usr/bin`, `/sbin` e `/bin`).

### Qual è la differenza tra un job pianificato e un processo?

Un job pianificato parte a orari stabiliti e termina quando ha finito. Un [processo](https://ops.vimonto.com/docs/it/servers/processes) gira sempre e viene riavviato da Supervisor quando si ferma. Usa un processo per i queue worker e un job pianificato per task come lo scheduler di Laravel.

### Un job può girare più spesso di una volta al minuto?

No. L'intervallo minimo di cron è un minuto. Per il lavoro che deve girare di continuo, usa un [processo](https://ops.vimonto.com/docs/it/servers/processes).
