Introduzione
at
è un'utilità della riga di comando che consente di pianificare l'esecuzione automatica di vari comandi e script in una data e un'ora specifiche. I lavori creati con at
vengono eseguiti una sola volta, rendendolo uno strumento eccellente per gestire attività una tantum che devono essere completate in un momento preciso.
In questo articolo spiegheremo come utilizzare e at
le sue utilità associate batch
per visualizzare, eliminare e creare lavori da eseguire in un secondo momento.atqatrm
Installazione at
A seconda della distribuzione, at
potrebbe essere presente o meno sul tuo sistema Linux.
Se il comando non è installato, puoi installarlo facilmente utilizzando il gestore pacchetti della tua distribuzione.
Installa at su CentOS e Fedora
sudo yum install at
Installa at su Ubuntu e Debian
sudo apt update
sudo apt install at
Una volta installato il pacchetto, assicurati atd
che il demone di pianificazione sia in esecuzione e impostato per l'avvio all'avvio:
sudo systemctl enable --now atd
Come utilizzare il comando at
La sintassi semplificata del comando at
è la seguente:
at [OPTION...] runtime
Il comando at
accetta la data e l'ora (runtime
) in cui si desidera eseguire il lavoro come argomento della riga di comando e si immette il comando da eseguire dallo standard input.
Ad esempio, creiamo un lavoro che verrà eseguito alle 9:00:
at 09:00
Dopo aver premuto il Enter
tasto, ti verrà presentato il at
prompt dei comandi, che di solito inizia con at>
. Inoltre, verrà visualizzato un messaggio di avviso che ti informa sulla shell in cui verrà eseguito il comando:
warning: commands will be executed using /bin/sh
at>
Inserisci uno o più comandi che desideri eseguire:
tar -xf /home/noviello/file.tar.gz
Una volta inseriti i comandi, premere Ctrl-D
per uscire dal prompt e salvare il lavoro:
at> <EOT>
job 4 at Tue May 5 09:00:00 2020
Il comando visualizzerà il numero del lavoro, l'ora e la data di esecuzione.
Esistono anche altri modi per passare il comando che desideri eseguire, oltre a immettere il comando nel prompt at
. Un modo è utilizzare il comando echo
e reindirizzare il comando a at
:
echo "command_to_be_run" | at 09:00
Un'altra opzione è utilizzare il documento Here:
at 09:00 <<END
Per leggere i comandi da un file anziché dallo standard input, richiamare il comando con l' -f
opzione seguita dal 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à all'utente un'e-mail contenente l'output 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 viene visualizzato alcun output:
at 09:00 -m
Comando batch
batch
oppure 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 processi vengono eseguiti quando il carico medio del sistema è inferiore a 1,5. Il valore del carico può essere specificato quando si richiama il atd
demone. Se il carico medio del sistema è superiore a quello specificato, i lavori rimarranno in coda.
Per creare un lavoro con batch
, passa i comandi che desideri eseguire:
echo "command_to_be_run" | batch
Specifica dell'ora di esecuzione
L'utilità at
accetta un'ampia gamma di specifiche temporali. È possibile specificare l'ora, la data e l'incremento rispetto all'ora corrente:
- Orario: per specificare un orario, utilizzare il modulo
HH:MM
oHHMM
. Se preferisci utilizzare il formato dell'orologio a 12 ore, puoi aggiungere "am" o "pm" dopo l'ora. Ad esempio, 10:30 o 18:45. Puoi anche utilizzare stringhe comenow
,midnight
,noon
oteatime
(16:00). Se un'attività o un evento è programmato per un orario già trascorso, verrà riprogrammato automaticamente alla stessa ora del giorno successivo. - Data: il comando consente di pianificare l'esecuzione del lavoro in una determinata data. La data può essere specificata utilizzando il nome del mese seguito dal giorno e da un anno facoltativo. In alternativa, puoi utilizzare stringhe come "oggi", "domani" o giorno della settimana per indicare la data. La data può essere indicata anche utilizzando i formati
MMDD[CC]YY
,MM/DD/[CC]YY
o .DD.MM.[CC]YY[CC]YY-MM-DD
- Incremento:
at
accetta anche incrementi nelnow + count time-unit
formato, dovecount
è 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 da eseguire tra un'ora da adesso:
at now +1 hours
Pianifica un lavoro da eseguire alle 12:30 del 21 ottobre 2020:
at 12:30 102120
Pianifica un lavoro da eseguire alle 13:00 tra due giorni:
at 1pm + 2 days
Pianifica un lavoro per la domenica successiva in un momento successivo di dieci minuti rispetto all'ora corrente:
at sunday +10 minutes
È inoltre possibile specificare un'ora e una data utilizzando [[CC]YY]MMDDhhmm[.ss]
l' -t
opzione. Ecco un esempio:
at -t 202005111321.32
Specifica della coda
Per impostazione predefinita, i lavori creati con at
vengono pianificati nella coda denominata a
, mentre i lavori creati con batch
vengono pianificati nella b
coda.
Le query possono avere un nome da a
a z
e A
a Z
. Le code con lettere inferiori vengono eseguite con una gentilezza inferiore, il che significa che hanno la priorità su quelle con lettere più alte.
Per specificare la coda per un lavoro, utilizzare l'opzione -q
seguita dal nome della coda desiderata. Ad esempio, se vuoi impostare un lavoro nella coda 'L', dovresti eseguire il comando con l'opzione -q L
:
at monday +2 hours -q L
Elenco lavori in sospeso
Per elencare i lavori in sospeso dell'utente, esegui 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 di coda e il nome utente.
noviello9 Tue May 5 12:22:00 2023 a noviello
12 Wed Oct 21 12:30:00 2023 a noviello
15 Tue May 5 09:00:00 2023 a noviello
6 Tue May 5 09:00:00 2023 a noviello
13 Mon May 4 23:08:00 2023 a noviello
11 Wed Jul 1 10:00:00 2023 a noviello
4 Tue May 5 09:00:00 2023 a noviello
Quando atq
viene richiamato come utente amministrativo, elencherà i lavori in sospeso di tutti gli utenti.
Rimozione di lavori in sospeso
Per rimuovere un lavoro in sospeso, invocare il comando atrm
o at -r
seguito dal numero del lavoro. Ad esempio, per rimuovere il lavoro con il numero nove, dovresti eseguire:
atrm 9
Limitare gli utenti
I file /etc/at.deny
e /etc/at.allow
consentono di controllare quali utenti possono creare lavori con at
o batch
comando. I file contengono un elenco di nomi utente, un nome utente per riga.
Per impostazione predefinita, /etc/at.deny
esiste solo il file ed è vuoto, il che significa che tutti gli utenti possono utilizzare il at
comando. Se desideri negare l'autorizzazione a un utente specifico, aggiungi 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 amministrativi possono utilizzare il at
comando.
Conclusione
Il comando at
è un'utilità utile che consente di pianificare i comandi da eseguire in un secondo momento. A differenza del comando crontab, che esegue i comandi in modo ricorrente, il comando at
esegue i comandi solo una volta.
Per saperne di più sulle varie opzioni disponibili con il comando at
, puoi digitare man at
nel tuo terminale. Verrà visualizzata la pagina del manuale che elenca tutte le opzioni disponibili con spiegazioni dettagliate.
Se hai ulteriori domande o hai bisogno di assistenza nell'utilizzo del comando at
, non esitare a lasciare un commento.