Introduzione
at
è un'utilità della riga di comando che consente di pianificare l'esecuzione dei comandi in un determinato momento. I lavori creati con at
vengono eseguiti una sola volta.
In questo articolo, vi spiegheremo come utilizzare at
e alcune sue utility come batch
, atq
, atrm
per visualizzare, eliminare e creare attività (jobs) da eseguire in un secondo momento.
Installare at
A seconda della distribuzione, at
potrebbe essere presente o meno sul tuo sistema Linux.
Se at
non è installato, è possibile installarlo facilmente utilizzando il gestore pacchetti della propria distribuzione.
Installare at su Ubuntu e Debian
sudo apt update
sudo apt install at
Installare at su CentOS e Fedora
sudo yum install at
Daemon atd
Una volta installato il programma, assicurarsi che il daemon atd
di pianificazione sia in esecuzione e impostato per l'avvio all'avvio:
sudo systemctl enable --now atd
Come usare il comando at
La sintassi semplificata per il comando at
è la seguente:
at [OPTION...] runtime
Il comando at
accetta la data e l'ora (runtime
) quando si desidera eseguire il lavoro (job) come parametro della riga di comando.
Creiamo un job che verrà eseguito alle 9:00:
at 09:00
Una volta colpito Enter
, ti verrà presentato il prompt dei comandi di at
che molto spesso inizia con at>
. Viene inoltre visualizzato un avviso che indica la shell in cui verrà eseguito il comando:
warning: commands will be executed using /bin/sh
at>
Immettere uno o più comandi che si desidera eseguire:
tar -xf /home/noviello/file.tar.gz
Al termine dell'immissione dei comandi, premere Ctrl-D
per uscire dal prompt e salvare il processo:
at> <EOT>
job 4 at Tue May 5 09:00:00 2020
Il comando visualizzerà il numero del lavoro e l'ora e la data di esecuzione.
Esistono anche altri modi per usare il comando che si desidera eseguire, oltre a immettere il comando nel prompt at
. Un modo è utilizzare echo
e reindirizzare il comando a at
:
echo "command_to_be_run" | at 09:00
Un'altra opzione è utilizzare Heredoc:
at 09:00 <<END
command_to_be_run
END
Per leggere i comandi da un file anziché dallo standard input, invocare il comando con l'opzione -f
che segue il percorso del file. Ad esempio, per creare un lavoro che eseguirà lo script /home/noviello/script.sh
:
at 09:00 -f /home/noviello/script.sh
Per impostazione predefinita, se il comando produce output, at
invierà un'e-mail con l'output all'utente una volta completato il lavoro. Richiamare at
con l'opzione -M
per sopprimere la notifica e-mail:
at 09:00 -M
Utilizzare -m
per inviare un'e-mail anche se non è presente alcun output:
at 09:00 -m
Comando batch
batch
o il suo alias at -b
pianifica i lavori e li esegue in una coda batch quando il livello di carico del sistema lo consente. Per impostazione predefinita, i lavori vengono eseguiti quando la media del carico del sistema è inferiore a 1,5
. Il valore del carico può essere specificato quando si richiama il demone atd
. Se la media di caricamento del sistema è superiore a quella specificata, i lavori attenderanno nella coda.
Per creare un lavoro con batch
, passare i comandi che si desidera eseguire:
echo "command_to_be_run" | batch
Specificare il tempo di esecuzione
L'utilità at
accetta una vasta gamma di specifiche temporali. È possibile specificare l'ora, la data e l'incremento dall'ora corrente:
- Time: per specificare un'ora, utilizzare il modulo
HH:MM
oHHMM
. Per indicare un formato orario di 12 ore, utilizzaream
opm
dopo l'orario. È inoltre possibile utilizzare le stringhe comenow
,midnight
,noon
, oteatime
(16:00). Se viene trascorso il tempo specificato, il lavoro verrà eseguito il giorno successivo. - Date: il comando consente di pianificare l'esecuzione del lavoro in una determinata data. La data può essere specificata usando il nome del mese seguito dal giorno e da un anno opzionale. È possibile utilizzare le stringhe, ad esempio
today
,tomorrow
o giorno della settimana. La data può essere anche indicate mediante leMMDD[CC]YY
,MM/DD/[CC]YY
,DD.MM.[CC]YY
o[CC]YY-MM-DD
formati. - Increment:
at
accetta anche incrementi nel formatonow + count time-unit
, in cuicount
è un numero etime-unit
può essere una delle seguenti stringhe:minutes
,hours
,days
, oweeks
.
Ora, data e incremento possono essere combinati, ecco alcuni esempi:
Pianifica un lavoro per la prossima domenica dieci minuti dopo l'ora corrente:
at sunday +10 minutes
Pianifica l'esecuzione di un lavoro alle 13:00 tra due giorni:
at 1pm + 2 days
Pianifica l'esecuzione di un lavoro alle 12:30 del 21 ottobre 2020:
at 12:30 102120
Pianifica l'esecuzione di un lavoro tra un'ora:
at now +1 hours
È inoltre possibile specificare un'ora e una data [[CC]YY]MMDDhhmm[.ss]
utilizzando l'opzione -t
. Ecco un esempio:
at -t 202005111321.32
Specificare la coda
Per impostazione predefinita, i lavori creati con at
sono pianificati nella coda denominata a
e i lavori creati con batch
sono pianificati nella coda b
.
Le query possono avere un nome da a
a z
e A
a Z
. Le code con lettere più basse funzionano con una precisione inferiore, il che significa che hanno priorità su quelle con lettere più alte.
È possibile specificare la coda con l'opzione -q
. Ad esempio, per impostare un lavoro in L
coda, eseguire:
at monday +2 hours -q L
Elencare i jobs in sospeso
Per elencare i lavori in sospeso dell'utente, eseguire il comando atq
o at -l
:
atq
L'output elencherà tutti i lavori, uno per riga. Ogni riga include il numero del lavoro, la data, l'ora, la lettera della coda e il nome utente.
9 Tue May 5 12:22:00 2020 a noviello
12 Wed Oct 21 12:30:00 2020 a noviello
15 Tue May 5 09:00:00 2020 a noviello
6 Tue May 5 09:00:00 2020 a noviello
13 Mon May 4 23:08:00 2020 a noviello
11 Wed Jul 1 10:00:00 2020 a noviello
4 Tue May 5 09:00:00 2020 a noviello
Quando atq
viene invocato come utente amministrativo, elencherà i lavori in sospeso di tutti gli utenti.
Rimuovere i lavori in sospeso
Per rimuovere un lavoro in sospeso, richiamare il comando atrm
o at -r
seguito dal numero del lavoro. Ad esempio, per rimuovere il lavoro con il numero nove, eseguire:
atrm 9
Limitare gli utenti
I file /etc/at.deny
e /etc/at.allow
consentono di controllare quali utenti possono creare lavori con i comandi at
o batch
. I file sono costituiti da un elenco di nomi utente, un nome utente per riga.
Per impostazione predefinita, esiste solo il file /etc/at.deny
ed è vuoto, il che significa che tutti gli utenti possono utilizzare il comando at
. Se si desidera negare l'autorizzazione a un utente specifico, aggiungere il nome utente a questo file.
Se il file /etc/at.allow
esiste solo gli utenti elencati in questo file possono utilizzare il comando at
.
Se nessuno dei file esiste, solo gli utenti con privilegi di amministratore possono utilizzare il comando at
.
Conclusione
L'utilità at
legge i comandi dall'input standard e li esegue in un secondo momento. A differenza di crontab, i lavori creati con at
vengono eseguiti solo una volta.
Per ulteriori informazioni su tutte le opzioni disponibili del comando at
digitare nel terminale il seguente comando:
man at