Orbit

Orbit - Processi pianificati

Cron jobs schedule recurring HTTP requests to your deployed project, so a nightly cleanup, an hourly sync or a weekly digest runs on time without you standing up a separate scheduler.

Orbit Cron Jobs

I cron job pianificano richieste HTTP ricorrenti al tuo progetto distribuito, in modo che una pulizia notturna, una sincronizzazione oraria o un digest settimanale vengano eseguiti in tempo senza che tu debba gestire uno scheduler separato.

Dove Risiedono i Cron Job

Apri Orbit, fai clic sul progetto e scegli Crons nel gruppo Configure nella barra delle schede del progetto. La pagina è intitolata Cron jobs e descrive cosa fa: pianifica richieste HTTP al tuo deployment di produzione, utilizzando la sintassi cron a cinque campi standard in UTC, o gli alias @hourly, @daily, @weekly e @monthly.

La pagina mostra l'Target host che chiamerà, così puoi confermare a colpo d'occhio che sta puntando al deployment giusto.

Pagina cron job per un progetto Orbit

Come Funziona

Orbit non esegue il tuo codice in uno scheduler. Chiama un URL sul tuo progetto secondo una pianificazione, e il tuo codice fa il lavoro.

Ciò significa che la cosa che pianifichi è una rotta ordinaria nella tua applicazione, ad esempio /api/cron/cleanup. Qualsiasi cosa la tua app possa fare in risposta a una richiesta, può farla secondo una pianificazione.

Creazione di un Cron Job

  1. Fai clic su New cron.
  2. Assegnagli un Name, fino a 120 caratteri.
  3. Imposta il Path sul tuo progetto, iniziando con una barra.
  4. Scegli una Schedule dai preset o digita un'espressione.
  5. Scegli un Method. GET è il predefinito.
  6. Aggiungi un Request body se il metodo è POST, PUT o PATCH.
  7. Imposta un Timeout tra 1 e 300 secondi. Il predefinito è 30.
  8. Lascia l'opzione Generate a Bearer secret spuntata a meno che tu non abbia la tua autenticazione.
  9. Fai clic su Create cron.

Preset di Pianificazione

PresetEspressione
Ogni 5 min*/5 * * * *
Ogni 15 min*/15 * * * *
Orario@hourly
Giornaliero 09:00 UTC0 9 * * *
Giornaliero mezzanotte@daily
Settimanale lun 09:000 9 * * 1
Mensile 1º@monthly

Oppure scrivi la tua espressione a cinque campi: minuto, ora, giorno del mese, mese, giorno della settimana.

Tutti gli orari sono UTC, senza adeguamento dell'ora legale. Un job impostato per 0 9 * * * viene eseguito alle 9:00 UTC tutto l'anno, il che si differenzia di un'ora rispetto all'ora della Nuova Zelanda due volte l'anno. Se un job deve essere eseguito a un'ora locale specifica, scegli deliberatamente l'ora UTC e annota in quale metà dell'anno hai ottimizzato.

Autenticazione della Chiamata

Lasciando l'opzione Bearer secret spuntata, viene generato un token casuale che viene inviato come intestazione Authorization ad ogni esecuzione. Viene mostrato una sola volta, immediatamente dopo la creazione, con la nota che non verrà più mostrato.

Copialo e controllalo nel tuo handler:

export async function GET(req) {
  const auth = req.headers.get('authorization');
  if (auth !== `Bearer ${process.env.CRON_SECRET}`) {
    return new Response('Unauthorized', { status: 401 });
  }
  // do the work
}

Archivia il secret utilizzando le variabili di ambiente del progetto: vedi Variabili di Ambiente in Orbit.

Senza un controllo come questo, il tuo percorso cron è un URL pubblico che chiunque può chiamare tutte le volte che vuole. Va bene per qualcosa di innocuo e serio per qualsiasi cosa che scrive, invia email o costa denaro. Aggiungi il controllo prima della prima esecuzione, non dopo che qualcuno ha trovato l'endpoint.

Puoi anche inviare le tue intestazioni personalizzate, se la tua applicazione ha già uno schema di autenticazione.

Lettura dell'Elenco di Job

Ogni job mostra:

  • Schedule, l'espressione su cui viene eseguito.
  • Next, quando verrà eseguito di nuovo.
  • Last, quando è stato eseguito l'ultima volta e come è andato.
  • Un contatore ok / fail.
  • Last error, dove il fallimento più recente ha lasciato un messaggio.
  • Un badge PAUSED quando è disattivato.

Quattro azioni si trovano su ogni riga: Run now, Pause o Resume, e Delete.

Run now esegue il job immediatamente, indipendentemente dalla sua pianificazione, e riporta il risultato. È il modo giusto per testare un nuovo job piuttosto che aspettare il prossimo tick.

Esiti dell'Esecuzione

StatoSignificato
OKIl tuo endpoint ha restituito una risposta di successo
FAILEDIl tuo endpoint ha restituito un errore, o la richiesta non ha potuto essere effettuata
TIMEOUTIl tuo endpoint non ha risposto entro il timeout
SKIPPEDL'esecuzione non è stata eseguita

Ogni esecuzione viene registrata con il suo stato, codice di risposta, durata, errore e cosa l'ha attivata, quindi un job che fallisce in modo intermittente lascia una traccia che puoi leggere piuttosto che un singolo "last error".

Scelta di un Timeout

Il timeout è per esecuzione, tra 1 e 300 secondi, con impostazione predefinita di 30.

Impostalo un po' al di sopra del caso peggiore reale del job, non molto al di sopra. Un timeout generoso su un job che si è bloccato significa cinque minuti di un builder che aspetta per niente. Un timeout stretto su un job che legittimamente impiega due minuti significa un fallimento permanente e un avviso fuorviante.

Meglio ancora, mantieni l'handler veloce: fallo mettere in coda il lavoro e restituisci immediatamente, piuttosto che fare il lavoro inline. Un cron job che ritorna in 200 millisecondi non va mai in timeout.

Limiti

Un progetto può contenere fino a 50 cron job. Questo è per progetto, quindi un account con diversi progetti ne ha più in totale.

Se hai bisogno di pianificare qualcosa contro lo staging piuttosto che la produzione, usa Cron triggers in Settings. Quella scheda ti permette di scegliere l'ambiente, ed è limitata a dieci trigger per progetto. Vedi Impostazioni Progetto Orbit.

Eliminazione di un Job

Fai clic su Delete e conferma. La conferma nota che la cronologia dell'esecuzione verrà rimossa anche, quindi se vuoi un record di come si è comportato un job, acquisiscilo prima di eliminare.

Metti in pausa piuttosto che eliminare quando stai interrompendo temporaneamente un job. La pausa mantiene la configurazione, il secret e la cronologia intatti.

Consigli Pratici

Rendi gli handler idempotenti. Una chiamata cron può essere ritentata, e Run now può essere premuto mentre un'esecuzione pianificata è già in corso. Il tuo handler dovrebbe affrontare l'esecuzione due volte senza fare il lavoro due volte.

Non pianificare tutto all'ora. 0 * * * * su ogni job significa che ogni job compete nello stesso momento. Distribuiscili: 7 * * * *, 23 * * * *, e così via.

Registra all'interno del tuo handler. Il record di esecuzione ti dice il codice di risposta e la durata. Quello che è effettivamente successo è l'affare della tua applicazione, e lo vorrai quando un job non fa silenziosamente nulla.

Risoluzione dei Problemi

Ogni esecuzione è FAILED con un 401. Il tuo handler sta rifiutando la richiesta. Verifica che il secret archiviato nelle tue variabili di ambiente corrisponda a quello generato qui, incluso il prefisso Bearer nel confronto.

Ogni esecuzione è FAILED con un 404. Il percorso non esiste nel progetto distribuito. Testalo in un browser contro l'host target mostrato sulla pagina.

Le esecuzioni TIMEOUT. L'handler sta facendo troppo inline. Dividi il lavoro, o aumenta il timeout se il lavoro impiega veramente così tanto tempo e non è un runaway.

Next non avanza mai. Il job è in pausa. Cerca il badge PAUSED.

Il job viene eseguito all'ora sbagliata. Verifica UTC rispetto all'ora locale. Questa è la sorpresa più comune con i job pianificati.

Dove Andare Dopo

Hai ancora bisogno di aiuto?

Scrivici a support@kapsulehost.com oppure apri una chat in KPanel.

Apri KPanel
Orbit - Processi pianificati