Michele Liberi software

versione 1.04, giugno 2026

Michele Liberi
mail: mliberi@gmail.com
cell: +393485211456
telegram: @MicheleLiberi

liberix

gcron, schedulatore globale

gcron è uno schedulatore che permette di definire e gestire un insieme di JOB in un unico database centralizzato, ma che poi verranno eseguiti su un insieme di macchine (raggiungibili via TCP/IP), anche con sistemi operativi diversi.

Il gcron è un'evoluzione del concetto del crontab (strumento standard del mondo UNIX), con molte funzionalità aggiuntive.

La prima differenza, importantissima, è che il crontab lavora localmente, per cui un amministratore di sistema che si trovi nelle condizioni di amministrare più servers nella stessa rete dovrà gestire contemporaneamente più tabelle di crontab, una per ogni macchina. Il gcron consente di avere un'unica tabella, multi server e multi utente, che può quindi essere gestita in modo assai più agevole su un solo server. L'esecuzione dei comandi avviene remotamente, a mezzo del comando rxc.

La gestione centralizzata dei JOB consente di gestire in modo semplice e naturale quelle schedulazioni che non sono legate ad un server fisico, ma sono invece legate ad un servizio ad alta disponibilità che può migrare su più nodi di un cluster. Ad esempio un resource group di un cluster HACMP (IBM AIX).

Per stabilire quando un JOB dovrà essere posto in esecuzione, oltre ai classici parametri del crontab (ore, minuti, giorno, mese, giorno della settimana), gcron gestisce un ulteriore parametro T a mezzo del quale è possibile specificare un tempo minimo che deve passare tra un'esecuzione e la successiva. In questo modo è assai semplice definire schedulazioni che devono essere avviate ad intervalli di tempo regolari, ad esempio ogni due ore.

Il crontab non dà nessun supporto per la gestione dei log, gcron invece salva il log (stdout+stderr) di ogni JOB posto in esecuzione ed il relativo return code. Questi log possono essere successivamente consultati dalla GUI oppure direttamente su filesystem. Per ogni schedulazione gcron mantiene solo gli ultimi N logfile, il parametro N è contenuto nella definizione del JOB. In questo modo l'area dedicata ai logfile rimane più o meno stabile in termini di spazio disco occupato.

gcron mette in esecuzione un JOB solo se la precedente esecuzione è terminata. Permette però (parametro maxT) di gestire un timeout, cioè un tempo massimo di esecuzione del JOB. Se allo scadere del tempo massimo il JOB è ancora in esecuzione, verrà automaticamente terminato.

In caso di return code diverso da zero gcron invia il file di log via e-mail ad una lista di utenti (parametro rcpts). Tale invio può avvenire opzionalmente anche in caso di esecuzione terminata senza errori (parametro info).

Un JOB può essere disattivato (parametro active), in tal caso rimane definito, ma non verrà più posto in esecuzione.

Particolarmente importante è il parametro LRs a mezzo del quale è possibile far partire il JOB solo previa allocazione di una o più risorse logiche. Le risorse logiche sono simili a dei semafori, che però possono avere grado di parallelismo maggiore di uno. Utilizzando le risorse logiche un JOB può essere sincronizzato con altri JOB definiti indipendentemente.

Il gcron ha una triplice natura:

In modalità servizio il gcron si comporta come un dèmone: rimane sempre attivo e ogni minuto verifica se ci sono JOB pronti per essere eseguiti ed eventualmente li lancia. Per attivare la schedulazione il gcron deve essere lanciato, una sola volta, con opzione -daemon, ad esempio alla partenza della macchina. Non è obbligatorio lanciare il dèmone, in alternativa è possibile lanciarlo ogni minuto tramite il crontab.

In modalità comando gcron può essere utilizzato per:

La modalità applicazione web è quella full optional.

Un JOB gcron ha le seguenti caratteristiche:

label
Il nome del JOB.
active
Un JOB con il flag active=false rimane definito, ma non verrà mai schedulato.
owner
Lo username dell'utente che ha creato il JOB e ne è proprietario, quindi lo può gestire.
host
Il nome del server sul quale il JOB verrà schedulato. Può essere un nome oppure un indirizzo IP.
user
Lo username che verrà usato per porre in esecuzione il JOB.
T
Definisce il tempo minimo tra due esecuzioni del JOB. Se, ad esempio, vogliamo che il JOB giri ogni due ore possiamo impostare T=2h.
HH
Espressione regolare per l'ora in cui il JOB verrà lanciato.
MM
Espressione regolare per il minuto in cui il JOB verrà lanciato.
day
Espressione regolare per il giorno del mese in cui il JOB verrà lanciato.
month
Espressione regolare per il mese in cui il JOB verrà lanciato.
wday
Espressione regolare per il giorno della settimana in cui il JOB verrà lanciato.
wom
Espressione regolare per la settimana del mese in cui il JOB verrà lanciato. Valori negativi indicano valori a ritroso rispetto alla fine del mese. Ad esempio wom=-1 indica l'ultima settimana del mese.
maxT
Tempo massimo di esecuzione del JOB. Se il JOB non termina entro questo tempo gli viene inviato il segnale SIGTERM.
nlog
Il numero massimo di file di log che vengono mantenuti per questo JOB. Al raggiungimento di questo numero massimo la creazione di un nuovo log implica la cancellazione del più antico.
info
Normalmente gcron manda una e-mail se il JOB termina con un return code maggiore di zero. Se il flag info è true la e-mail viene inviata anche se rc=0.
rcpts
La lista degli indirizzi e-mail ai quali verranno inviate le e-mail di notifica. Se la lista è vuota non verrà generata alcuna e-mail.
lastrun
Questo attributo viene valorizzato automaticamente e contiene il timestamp dell'ultima esecuzione del JOB.
status
Questo attributo viene valorizzato automaticamente e contiene il return code dell'ultima esecuzione del JOB.
elapsed
Questo attributo viene valorizzato automaticamente. Durante l'esecuzione del JOB contiene il runtime, al termine del JOB contiene il tempo totale di esecuzione.
LRs
La lista delle logical resorce (gestite dal servizio LRM) che il JOB deve acquisire prima di essere posto in esecuzione. Si tratta di un importante meccanismo che permette di sincronizzare il JOB con altri JOB.
notes
Una descrizione del JOB, ad uso di mera documentazione.
script
La stringa da passare alla shell per l'esecuzione del JOB.
priority
Indica la priorità (cfr. nice system call) con la quale verrà lanciato il JOB.

Per ulteriori informazioni sulla sintassi di attivazione e sulle opzioni disponibili lanciare il comando con l'opzione -h.

(c) M. Liberi, last updated: 2026-06-15