at (Unix)

Da Wikipedia, l'enciclopedia libera.

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.

Uso[modifica | modifica sorgente]

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 comandi[modifica | modifica sorgente]

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 accodati[modifica | modifica sorgente]

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 comandi[modifica | modifica sorgente]

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.

Esempi[modifica | modifica sorgente]

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

Note[modifica | modifica sorgente]

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

Voci correlate[modifica | modifica sorgente]

Collegamenti esterni[modifica | modifica sorgente]

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