AT(P)

NOME
at - esegue comandi ritardati

SINTASSI

at [-m][-f file][-q queuename] -t time_arg

at [-m][-f file][-q queuename] timespec ...

at -r at_job_id ...

at -l -q queuename

at -l [at_job_id ...]

DESCRIZIONE

L'utilità at può leggere comandi dallo standard input e raggrupparli come un at-job, per farli eseguire successivamente.

L'at-job può essere eseguito in un'invocazione separata della shell, funzionante in un gruppo di processo separato senza alcun terminale di controllo, tranne che variabili d'ambiente, directory attuale di lavoro, maschera di creazione file, e altri attributi di esecuzione temporale definiti dall'implementazione attivi quando l'utilità at è eseguita, possono essere trattenuti e usati quando l'at-job è eseguito.

Quando l'at-job viene sottomesso, l'at_job_id e l'ora programmata possono venire scritti sullo standard error. L'at_job_id è un identificatore che deve essere una stringa consistente unicamente di caratteri alfanumerici e dal carattere del punto. L'at_job_id deve essere assegnata dal sistema quando il lavoro è programmato in modo che identifichi univcamente un determinato lavoro.

La notifica all'utente e il processamento dello standard output e dello standard error del lavoro sono descritti sotto l'opzione -m.

Gli utenti devono poter usare at se il loro nome appare nel file /usr/lib/cron/at.allow. se questo file non esiste, il file /usr/lib/cron/at.deny deve essere controllato per determinare se all'utente deve essere proibito l'accesso a at. Se non esiste nessun file, solo un processo con i privilegi appropriati deve poter sottomettere un lavoro. Se esiste solo at.deny ed è vuoto, deve venire permesso l'uso globale. I file at.allow e at.deny devono consistere di un nome utente per linea.

OPZIONI

L'utilità at deve essere conforme al volume Base Definitions di IEEE Std 1003.1-2001, Sezione 12.2, Utility Syntax Guidelines.

Devono essere supportate le seguenti opzioni:

-f  file
    Specifica il nome percorso di un file da usare come sorgente dell'at-job, in luogo dello standard input.

-l  (La lettera elle) Riporta tutti i lavori programmati per l'utente invocante se non è specificato nessun operando at_job_id. Se at_job_ids è specificato, riporta solo informazioni per questi lavori. L'output deve essere scritto sullo standard output.

-m  Invia posta all'utente invocante dopo che l'at-job ha funzionato, annunciando il suo completamento. Lo standard output e lo standard error prodotti dall'at-job devono essere postati anche all'utente, a meno che vengano rediretti altrove. La mail deve essere inviata anche se il lavoro non produce output.

Se -m non è usato, lo standard output e lo standard error del lavoro devono essere forniti all'utente a mezzo posta, a meno che vengano rediretti altrove; se non può essere fornito tale output, l'implementazione non ha bisogno di notificare all'utente il completamento del lavoro.

-q  queuename

    Specifica in quale coda programmare la sottomissione di un lavoro. Quando usata con l'opzione -l limita la ricerca a questa particolare coda. Per default, gli at-job devono essere programmati nella coda a. In contrasto, la coda b deve essere riservata per i lavori batch; vedere batch. I significati di tutte le altre queuenames sono definiti dall'implementazione. Se -q è specificta con gli argomenti o -t time_arg o timespec i risultati non sono specificati.

-r  Rimuove i lavori con gli operandi specificati at_job_id che erano precedentemente programmati dall'utilità at.

-t  time_arg
    Sottomette il lavoro per farlo eseguire all'ora specificata dall'opzione-argomento time, il cui formato è garntito dall' applicazione ed è specificato dall'utilità touch -t time.

OPERANDI

Devono essere supportati i seguenti operandi:

at_job_id
    Il nome riportato da una precedente invocazione dell'utilità at all'ora in cui il lavoro è stato programmato.

timespec
    Sottomette il lavoro per farlo eseguire alla data e ora specificati. Tutti gli operandi timespec sono interpretati come se fossero separati da <spazi> e concatenati, e su di essi si deve fare il parse come descritto al termine di questa sezione. La data e ora deve essere interpretata come se fosse nel fuso orario dell'utente (come determinato dalla variabile TZ), a meno che sotto non appaia un nome di zona di fuso orario come parte di time.

Nella localizzazione POSIX quanto segue descrive le tre parti della stringa di specificazione dell'ora. Tutti i valori delle categorie LC_TIME nella localizzazione POSIX devono venire riconosciuti in un modo case-insensitive.

time
    L'ora può essere specificata in una, due, o quattro cifre. Numeri di uno e due cifre devono essere considerati ore; numeri di quattro cifre devono essere considerati ore e minuti In alternativa l'ora può essere specificata come due numeri separati da un carattere di due punti, ovvero hour:minute. Un'indicazione AM/PM (uno dei valori dalle parole chiave am_pm nella categoria locale LC_TIME) può seguire l'ora; altrimenti va considerata come un'ora su un orologio di 24 ore. Può anche essere aggiunto un nome di fuso orario per qualificare ulteriormente l'ora. I nomi accettabili delle fascie orarie sono definiti dall'implementazione, con l'eccezione che essi devono essere case-insensitive e la stringa utc è supportata per indicare che l'ora è in Coordinated Universal Time. Nella localizzazione POSIX il campo time può anche essere uno dei seguenti token:

    midnight
        Indica l'ora 12:00 am (00:00).

    noon
        Indica l'ora 12:00 pm.

    now
        Indica giorno e ora corrente. L'invocazione di at <now> deve sottomettere un at-job per una potenziale esecuzione immediata (ovvero, soggetta solo a ritardi di scheduling non specificati).

date
    Può essere specificata opzionalmente una data come nome del mese (uno dei valori dalle parole chiave mon o abmon nella categoria locale LC_TIME) seguita da un numero del giorno (e possibilmente numero di anno preceduto da una virgola), o un giorno della settimana (uno dei valori delle parole chiave day o abday nella categoria locale LC_TIME). Nella localizzazione POSIX devono essere riconosciuti due giorni speciali:

    today
        Indica il giorno corrente.

    tomorrow
        Indica il giorno seguente al giorno corrente.

    Se non c'è la data, si deve presumere today se l'ora data è maggiore dell'ora corrente, e si deve presumere tomorrow se è minore. Se il mese dato è minore del mese corrente (e non viene dato alcun anno), si deve presumere l'anno prossimo.

incremento
    L'opzione incremento deve essere un numero preceduto da un segno più ( '+' ) seguito da uno dei seguenti suffissi: minutes, hours, days, weeks, months, o years. (Devono anche essere accettate le forme singolari). La parola chiave next deve essere equivalente a un numero di incremento di +1. Per esempio i seguenti comandi sono equivalenti:

        at 2pm + 1 week
        at 2pm next week

La seguente grammatica descrive il formato esatto di timespec nella localizzazione POSIX. Le convenzioni generali per questo stile grammaticale sono descritte in Grammar Conventions . Questa sintassi formale deve avere precedenza sulla precedente descrizione di sintassi del testo. Il token o delimitatore più lunghi devono essere riconosciuti ad un dato punto. Quando usato in un timespec, i token possono anche essere delimitati da sazi bianchi.

    %token hr24clock_hr_min
    %token hr24clock_hour
    /*
      Un hr24clock_hr_min è un numero di uno, due, o quattro cifre. Un
      numero di uno o due cifre costituisce un hr24clock_hour. Un hr24clock_hour
      può essere qualunque cifra singola [0,9], o può essere di due cifre,
      la cui estensione è [00,23]. se un hr24clock_hr_min è un numero di
      quattro cifre, le prime due cifre devono essere un hr24clock_hour
      valido, mentre le ultime due rappresentano il numero di minuti, tra [00,59].
    */

    %token wallclock_hr_min
    %token wallclock_hour
    /*
      Un wallclock_hr_min è un numero di una, due, o quattro cifre.
      Un numero di una o due cifre costituisce una wallclock_hour.
      Una wallclock_hour può essere un numero a cifra singola [1,9], o può
      essere di due cifre, compreso nell'insieme [01,12]. Se una wallclock_hr_min
      è un numero di quattro cifre, le prime due cifre devono essere una
      wallclock_hour valida, mentre le ultime due rappresentano il numero di
      minuti, tra [00,59].
    */

    %token minute
    /*
      Un minuto è un numero di una o due cifre il cui valore può essere [0,9]
      o [00,59].
    */

    %token day_number
    /*
      Un day_number è un numero nel campo appropriato per il particolare
      mese e anno specificati rispettivamente da month_name e year_number.
      Se non viene dato alcun year_number si presuppone l'anno corrente se
      data e ora date sono successive a questo anno. Se non è dato alcun
      year_number e data e ora sono già avvenute quest'anno e il mese non è
      il mese corrente, l'anno presunto è il prossimo anno.
    */

    %token year_number
    /*
      Un year_number è un numero di quattro cifre che rappresenta l'anno A.D.,
      nel quale l'at_job viene eseguito.
    */

    %token inc_number
    /*
      Lo inc_number è il numero di volte che il successivo incremento di
      periodo verrà aggiunto alla data e ora specificate.
    */

    %token timezone_name
    /*
      Il nome di una fuso orario opzionale come suffisso al campo ora, in
      un formato definito dall'implementazione.
    */

    %token month_name
    /*
      Uno dei valori dalle parole chiave mon o abmon nella categoria locale
      LC_TIME.
    */

    %token day_of_week
    /*
      Uno dei valori dalle parole chiave day o abday nella categoria locale
      LC_TIME.
    */

    %token am_pm
    /*
      Uno dei valori dalla parola chiave am_pm nella categoria locale e
      LC_TIME.
    */

    %start timespec
    %%
    timespec    : ora
                | ora data
                | ora incremento
                | ora data incremento
                | nowspec
                ;

    nowspec     : "now"
                | "now" incremento
                ;

    time        : hr24clock_hr_min
                | hr24clock_hr_min nome_fascia_oraria
                | hr24clock_hour ":" minuto
                | hr24clock_hour ":" minuto nome_fascia_oraria
                | wallclock_hr_min am_pm
                | wallclock_hr_min am_pm nome_fascia_oraria
                | wallclock_hour ":" minuto am_pm
                | wallclock_hour ":" minuto am_pm nome_fascia_oraria
                | "noon"
                | "midnight"
                ;

    date        : nome_mese numero_giorno
                | nome_mese numero_giorno "," numero_anno
                | giorno_della_settimana
                | "today"
                | "tomorrow"
                ;

    increment   : "+" numero_inc periodo_inc
                | "next" periodo_inc
                ;

    inc_period  : "minute" | "minutes"
                | "hour" | "hours"
                | "day" | "days"
                | "week" | "weeks"
                | "month" | "months"
                | "year" | "years"
                ;

STDIN

Lo standard input deve essere un file di testo composto da comandi accettabili dal linguaggio comandi della shell descritto nello Shell Command Language . Lo standard input deve essere usato solo se non è specificata nessuna opzione file -f.

FILE DI INPUT

Vedere la sezione STDIN.

I file di testo /usr/lib/cron/at.allow e /usr/lib/cron/at.deny deve contenere zero o più nomi, uno per linea, di utenti a cui, rispettivamente, è permesso o vietato l'accesso alle utilità at and batch.

VARIABILI D'AMBIENTE

Le seguenti variabili d'ambiente influenzano l'esecuzione di at:

LANG
    Fornisce un valore di default per le variabili di internazionalizzazione che sono non impostate e nulle. (Vedere il volume Base Definitions di IEEE Std 1003.1-2001, Sezione 8.2, Internationalization Variables per la precedenza delle variabili di internazionalizzazione usate per determinare i valori delle categorie locali).

LC_ALL
    Se impostata ad un valore di stringa non vuoto, sovrascrive i valori di tutte le altre variabili di internazionalizzazione.

LC_CTYPE
    Determina la localizzazione per l'interpretazione di sequenze di byte di dati di testo come cartteri (per esempio, caratteri singolo byte o caratteri multi-byte in argomenti e file di input).

LC_MESSAGES
    Determina la localizzazione che deve essere usata per influenzare il formato e i contenuti dei messaggi di diagnostica scritti sullo standard error e i messaggi informativi scritti sullo standard output.

NLSPATH
    Determina la locazione dei cataloghi messaggi per il processamento di LC_MESSAGES .

LC_TIME
    Determina formato e contenuti per le stringhe di data e ora scritte e accettate da at.

SHELL
    Determina un nome di un interprete comando da usare per invocare l'at-job. Se la variabile è non impostata o nulla, deve essere usato sh. Se è impostata a un valore diverso da un nome per sh, l'implementazione deve fare una delle seguenti azioni: usare questa shell; usare sh; usare la shell di login dal database utente; o uno dei precedenti accompagnato da una diagnostica di avviso su cosa è stato scelto.

TZ  Determina il fuso orario. Il lavoro deve essere sottoposto per l'esecuzione all'ora specificata da timespec o -t time relativa al fuso orario specificato dalla variabile TZ. Se timespec specifica un fuso orario, esso deve sovrascrivere TZ . Se timespec non specifica un fuso orario e TZ non è impostata o è nulla, deve essere utilizzato un fuso orario non specificato.

EVENTI ASINCRONI

Default.

STDOUT

Quando lo standard input è un terminale, sullo standard output possono venire scritti suggerimenti del formato non specificato per ciascuna linea dell'input dell'utente descritta nella sezione STDIN.

Nella localizzazione POSIX quanto segue deve essere scritto sullo standard output per ciascun lavoro quando i lavori sono elencati in risposta all'opzioe -l:

    "%s\t%s\n", at_job_id, <data>

dove data deve essere equivalente nel formato all'output di:

    date +"%a %b %e %T %Y"

La data e ora scritti devono venire regolati in modo che appaiono nel fuso orario dell'utente (come determinato dalla variabile TZ).

STDERR

Nella localizzazione POSIX quanto segue deve venire scritto sullo standard error quando un lavoro è stato sottoposto con successo:

    "job %s at %s\n", at_job_id, <data>

dove data ha lo stesso formato di quello descritto nella sezione STDOUT. Nè questo nè i messaggi di avviso riguardanti la selezione dell'interprete comandi devono essere considerati una diagnostica che cambia lo stato di uscita.

I messaggi di diagnostica, se ce ne sono, devono essere scritti sullo standard error.

FILE DI OUTPUT

Nessuno.

DESCRIZIONE ESTESA

Vuoto.

STATO DI USCITA

Devono essere restituiti i seguenti valori in uscita:

0   L'utilità at ha sottoposto con successo, rimosso, o elencato un lavoro o lavori.

>0  C'è stato un errore.

CONSEGUENZE DEGLI ERRORI

I lavori potrebbero non venire programmati, rimossi o elencati.

Le seguenti sezioni sono informative.

USO DELL'APPLICAZIONE

Il formato della linea di comando at qui mostrato è garantito solo per la localizzazione POSIX. Altre culture potrebbero venire supportate con interfacce sostanzialmente differenti, sebbene siano incoraggiate implementazioni per fornire livelli di funzionalità comparabili.

Poiché il comando funziona in una invocazione della shell separata, funzionando in un gruppo di processo separato senza terminale di controllo, i descrittori di file aperti, trap e priorità ereditate dall'ambiente invocante vengono persi.

Alcune implementazioni non permettono sostituzioni di shell diverse usando SHELL . I sistemi System V, per esempio, hanno usato il valore della shell login per l'utente in /etc/passwd. Per selezionare affidabilmente un altro interprete comandi l'utente deve includerlo come parte dello script, come:

    $ at 1800
    miashell mioscript
    EOT
    job ... at ...
    $

ESEMPI

1.  Questa sequenza può essere usata in un terminale:

    at -m 0730 tomorrow
    sort < file >outfile
    EOT

2.  Questa sequqenza, che dimostra la redirezione dello standard error verso una pipe, è utile in una procedura di comando (la sequenza delle specificazioni di redirezione dell'output è significativa):

    at now + 1 hour <<!
    diff file1 file2 2>&1 >outfile | mailx mygroup
    !

3.  Per avere esso stesso una riprogrammazione del lavoro, at può essere invocato da un at-job. Per esempio questo script di processamento giornaliero chiamato my.daily funziona ogni giorno (sebbene fIcrontab sia un veicolo più appropriato per questo lavoro):

    # my.daily funziona ogni giorno
    daily processingat now tomorrow < my.daily

4.  La spaziatura delle tre porzioni della localizzazione POSIX timespec è piuttosto flessibile nel momento in cui non ci siano ambiguità. Esempi di varie ore e presentazioni di operandi includono:

    at 0815am Jan 24
    at 8 :15amjan24
    at now "+ 1day"
    at 5 pm FRIday
    at '17
        utc+
        30minutes'

LOGICA

L'utilità at legge dallo standard input i comandi da eseguire successivamente. Può essere utile redirigere lo standard output e lo standard error all'interno dei comandi specificati.

L'opzione -t time è stata aggiunta come nuova capacità di supportare un modo internazionalizzato di specificare un'ora per l' esecuzione del lavoro sottoposto.

Le prime proposte aggiungevano un concetto "jobname" come modo di dare nomi dei lavori sottoposti che siano significativi per l'utente che li sottopone. L'at_job_id storico specificato dal sistema non dà indicazioni di cosa sia il lavoro. Dopo ulteriori riflessioni fu deciso che il beneficio di questo non valeva il cambiamento all'interfaccia storica. La funzionalità at è utile in ambienti semplici, ma in situazioni grandi o complesse la funzionalità fornita dll'opzione dei Batch Services è più utile.

L'opzione -q storicamente è stata un'opzione non documentata, usata principlamente dall'utilità batch.

L'opzione System V -m è stata ggiunta per fornire un metodo per informare gli utenti che un at-job è stato completato. Altrimenti gli utenti sono solo informati quando l'output allo standard error o standard output non sono rediretti.

Il comportamento <attuale> di at è stato cambiato in una precedente proposta dall'essere non specificato al sottoporre un lavoro per una esecuzione potenziale immediata. Le implementazioni storiche di BSD at supportano questo. Le implementazioni storiche di System V in questo caso danno un errore, ma un cambiamento alle versioni di System V potrebbe avere ramificazioni non retro-compatibili.

Su sistemi basati su BSD un'opzione -u user permette a coloro che hanni i privilegi appropriati di accedere ai lavori di altri utenti. Poiché questa è principlamente una funzione di amministrazione del sistema essa non è implementata universalmente, ed è stata omessa. Similarmente è stata omessa una specifica per il formato dell'output di un utente con privilegi appropriati che vede la coda di altri utenti.

L'opzione -f file da System V è usata in alternativa al metodo BSD di usare l'ultimo operando come nome di percorso. Il metodo BSD è ambiguo:

    at 1200 friday

significa la stessa cosa se c'è un file chiamato friday nella directory corrente?

L'at_job_id è composto da un insieme limitato di caratteri nella pratica storica, e qui è obbligatorio invalidare sistemi che possano tentare di usare caratteri che richiedano shell quoting o che non possano essere facilmente analizzati dagli script di shell.

L'utilità at varia tra sistemi System V e BSD nel modo di usare i fusi orari. Su sistemi System V la variabile TZ influenza le ore in cui si sottopone l'at-job e le ore visualizzate per l'utente. Su sistemi BSD TZ non è presa in conto. Il comportamento BSD è ottenuto facilmente con la specifica corrente. Se l'utente desidera avere il fuso orario di default a quello del sistema, è sufficiente dare il comando at immediatamente dopo un azzeramento o assegnamento nullo a TZ. Per esempio:

    TZ= at noon ...

Dà il risultato BSD desiderato.

Mentre la grammatica in stile yacc-like specificata nella sezione OPERANDI è lessicalmente ambigua in rapporto alle stringhe di cifre, verrà probabilmente scritto un analizzatore sintattico per cercare e restituire stringhe di cifre in questi casi. L'analizzatore potrà quindi verificare se la stringa di cifre restituita sia un numero_giorno, o un numero_anno valido, e così via, in funzione del contesto.

DIREZIONI FUTURE

Vuoto.

VEDERE ANCHE

batch , crontab

COPYRIGHT
Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between this version and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html .