Hai praticamente risposto alla domanda da solo: i lavori cron sono il modo standard per farlo.
In PHP, non hai molta scelta su questo: l'intera lingua è costruita con un modello di esecuzione in mente dove ottieni una lavagna pulita con ogni richiesta, e la lingua non è molto adatta per implementare a lungo - Processi di esecuzione - puoi puoi eseguirlo, ma devi stare molto attento a non far filtrare la memoria.
In Python, dipende da come si collega il codice a un server Web; se si utilizza un server Web integrato nel proprio codice in un processo a esecuzione prolungata, è possibile attivare l'elaborazione automatica direttamente da lì, il che significa che in questi casi non è necessario cron. Se, tuttavia, segui un paradigma di nuovo processo per ogni richiesta come fa PHP ( mod_python
esegue questa IIRC), allora sei praticamente limitato a lavori cron o programmi di pianificazione simili.
Non so abbastanza su Ruby per fare commenti qualificati, ma presumo che la situazione sia simile a quella in Python.
Ovviamente, puoi sempre implementare un processo di lunga durata al di fuori del tuo normale sito web, che utilizza solo lo stesso backend di persistenza e condivide del codice; un tale processo potrebbe quindi implementare la propria programmazione e persino agire su altri eventi. Ad esempio, è possibile impostare un processo che si riattiva quando un particolare file cambia, esegue qualche elaborazione, quindi ritorna in stato di stop. Questo approccio ha due vantaggi:
- Dal momento che esiste sempre una di queste procedure, non devi preoccuparti delle condizioni di gara, come quelle causate da un lavoro cron che impiega così tanto tempo che le singole iterazioni iniziano a sovrapporsi - il tuo processo esegue semplicemente una iterazione alla volta.
- È possibile agire sugli eventi immediatamente senza aggiungere un sovraccarico di pianificazione. Con i lavori cron, devi scegliere tra polling frequente (latenza più breve, più overhead) e polling meno frequente (meno overhead, latenze più lunghe), ma un processo che attende solo un file da modificare ha un overhead quasi zero mentre inattivo.
Tuttavia è più difficile da configurare, e probabilmente vorrai una specie di meccanismo di watchdog nel caso in cui il processo muoia.