at (Unix)

comando dei sistemi operativi Unix e Unix-like

at è un comando dei sistemi operativi Unix e Unix-like, e più in generale dei sistemi POSIX[1], che permette di far eseguire uno o più comandi in un dato momento nel futuro, senza che sia richiesta la presenza dell'utente. Usando ripetutamente il comando at è possibile accodare più gruppi distinti di comandi, da eseguirsi in momenti diversi.

L'eventuale output prodotto dai comandi (lo standard output e lo standard error), se non specificato diversamente, verrà inviato tramite email all'utente che li ha accodati. Quest'ultimo può anche farsi notificare via email del completamento dell'esecuzione dei comandi.

Il comando batch è una variante del comando at che usa impostazioni predefinite diverse tali da eseguire quanto prima i comandi usando una priorità inferiore a quella normalmente usata da at. Di fatto equivale al comando at -m -q b now, che esegue i comandi non appena il sistema non ha altre operazioni urgenti da eseguire e che notifica via email anche il completamento dell'esecuzione.

L'ambiente in cui i comandi sono eseguiti è reso per quanto possibile simile a quello in cui essi sono stati specificati. In altre parole, oltre ai comandi stessi, sono memorizzati anche:

Se non specificato diversamente, at legge la sequenza dei comandi da eseguire dallo standard input (un comando per linea) fino all'esaurimento dei dati (nell'uso interattivo in un terminale è tipicamente possibile indicare ciò con la sequenza Ctrl-D).

Un gruppo di comandi accodati prende il nome di at-job (un job di at), a cui il sistema assegna un identificativo univoco che permette di farvi riferimento in seguito, ad esempio per annullare una esecuzione.

UsoModifica

Il comando at può essere invocato in più modi a seconda che si vogliano accodare comandi da eseguire, elencare i comandi accodati oppure annullare un gruppo di comandi accodati.

Accodare comandiModifica

In questo caso esistono due modi di invocare il comando che differiscono solo nel modo in cui viene specificato l'istante in cui eseguire i comandi.

La prima forma è la seguente:

at [opzioni] -t data_e_ora

L'istante data_e_ora viene specificato secondo il formato che segue (che è lo stesso usato nel comando touch):

  • anno a quattro oppure due cifre (facoltativo);
  • mese a due cifre;
  • giorno a due cifre;
  • ore a due cifre;
  • minuti a due cifre;
  • un punto seguito dai secondi a due cifre (facoltativo)

Ad esempio, per esprimere le 15:30:23 del 22 luglio 2009, si può usare -t 200907221530.23.

La seconda forma è invece la seguente:

at [opzioni] timespec

L'istante è specificato tramite il parametro timespec, composto di più parti:

  • ore e minuti, opzionalmente seguiti da AM o PM se si usa il formato a 12 ore ed eventualmente anche dal nome di un fuso orario se non si vuole usare quello corrente. I formati riconosciuti sono:
    • H o HH: ore, a una o due cifre (es. 14);
    • HHMM: ore a due cifre e minuti a due cifre (es. 1403);
    • HH:MM: ore a una o due cifre e minuti a una o due cifre (es. 14:3);
    • midnight: mezzanotte;
    • noon: mezzogiorno;
    • now: l'ora corrente;
  • data (facoltativa). Se viene omessa, si intende la data corrente, o quella del giorno successivo se l'ora indicata è già trascorsa. I formati riconosciuti sono:
    • MMM DD: il nome (abbreviato o meno) del mese seguito dal numero del giorno (es. mar 15 per indicare il 15 marzo). Se il giorno è già trascorso, si intende lo stesso giorno dell'anno successivo;
    • MMM DD,YYYY: il nome (abbreviato o meno) del mese seguito dal numero del giorno e dall'anno (es. mar 15,2031 per indicare il 15 marzo 2031);
    • DDD: nome del giorno della settimana. Viene considerata la settimana corrente, o quella successiva se il giorno è già trascorso;
    • today: il giorno odierno;
    • tomorrow: l'indomani;
  • scostamento (facoltativo): specifica un intervallo di tempo da aggiungere alla data e ora specificate in precedenza.
    • + N minutes: N minuti dopo l'istante indicato;
    • + N hours: N ore dopo l'istante indicato;
    • + N days: N giorni dopo l'istante indicato;
    • + N weeks: N settimane dopo l'istante indicato;
    • + N months: N mesi dopo l'istante indicato;
    • + N years: N anni dopo l'istante indicato;

Tra le opzioni che possono essere specificate vi sono:

-f file
Legge i comandi da eseguire dal file avente il nome specificato anziché dallo standard input.
-m
Notifica l'utente anche del completamento dell'esecuzione dei comandi accodati (utile nel caso i comandi non producano alcun output).
-q coda
Specifica a quale coda di esecuzione vanno aggiunti i comandi. Il parametro coda è tipicamente una singola lettera, e se l'opzione non è specificata il comportamento predefinito prevede di usare la coda a se si usa il comando at, e la coda b se si usa il comando batch. In generale, quanto presente nella coda di esecuzione a sarà eseguito con priorità maggiore rispetto a quanto presente nella coda di esecuzione b, e così via fino alla lettera z (ad esempio, nell'implementazione presente nei sistemi GNU/Linux viene usato un valore di nice tanto maggiore quanto più ci si avvicina alla lettera z).

Elencare i comandi accodatiModifica

In questo caso vi sono due forme:

at -l -q coda

elenca informazioni sugli at-job dell'utente corrente che sono accodati nella coda specificata.

at -l [job_id1 …]

elenca informazioni sugli at-job dell'utente corrente identificati dai parametri job_id. Se non è specificato alcun job_id, elenca tutti quelli presenti al momento.

In alcuni sistemi, tra cui ad esempio Debian GNU/Linux, esiste anche il comando atq, che equivale al comando at -l.

Annullare comandiModifica

In questo caso la sintassi è la seguente:

at -r job_id

Il parametro job_id è l'identificativo assegnato dal sistema al gruppo di comandi che si vuole annullare.

In alcuni sistemi, tra cui ad esempio Debian GNU/Linux, occorre specificare l'opzione -d anziché l'opzione -r, ed esiste il comando equivalente atrm.

EsempiModifica

Esegue dopo venti minuti i comandi cd /tmp e ls -l:

$ at now + 20 minutes
at> cd /tmp
at> ls -l
at> ^D
job 10 at Thu Apr 23 23:24:00 2009

Esegue il comando mpg123 urlo.mp3 alle 02:30 del 1º novembre:

$ at 2:30 nov 1
at> mpg123 urlo.mp3
at> ^D
job 11 at Sun Nov 1 02:30:00 2009

Elenca i comandi accodati per l'utente corrente:

$ at -l
10	Thu Apr 23 23:24:00 2009 a matteo
11	Sun Nov 1 02:30:00 2009 a matteo

Elimina i comandi programmati per il 1º novembre, che hanno identificativo 11:

$ at -r 11

NoteModifica

  1. ^ (EN) at, in The Open Group Base Specifications Issue 7 IEEE Std 1003.1, 2008 Edition. URL consultato il 22-04-2009.

Voci correlateModifica

Collegamenti esterniModifica

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica