at
è un'utilità della riga di comando che consente di pianificare i comandi da eseguire in un determinato momento. Lavori creati con at
vengono eseguiti una sola volta.
In questo articolo spiegheremo come usare at
e le sue utilità associate batch
, atq
, atrm
per visualizzare, eliminare e creare lavori da eseguire in un secondo momento.
Installazione di at
#
A seconda della distribuzione, at
potrebbe essere presente o meno sul tuo sistema Linux.
Se at
non è installato, puoi installarlo facilmente usando il gestore di pacchetti della tua distribuzione.
-
Installa
at
su Ubuntu e Debiansudo apt update
sudo apt install at
-
Installa
at
su CentOS e Fedorasudo yum install at
Una volta installato il programma, assicurati di atd
, il demone di pianificazione è in esecuzione e impostato per l'avvio all'avvio:
sudo systemctl enable --now atd
Come utilizzare il at
Comando #
La sintassi semplificata per at
il comando è il seguente:
at [OPTION...] runtime
Il at
il comando prende la data e l'ora (runtime
) quando si desidera eseguire il lavoro come parametro della riga di comando e il comando da eseguire dallo standard input.
Creiamo un lavoro che verrà eseguito alle 9:00:
at 09:00
Dopo aver premuto Enter
, ti verrà presentato il at
prompt dei comandi che il più delle volte inizia con at>
. Viene visualizzato anche un avviso che indica la shell in cui verrà eseguito il comando:
warning: commands will be executed using /bin/sh
at>
Inserisci uno o più comandi che vuoi eseguire:
tar -xf /home/linuxize/file.tar.gz
Quando hai finito di inserire i comandi, premi 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 e l'ora e la data di esecuzione.
Ci sono anche altri modi per passare il comando che vuoi eseguire, oltre a inserire il comando nel at
richiesta. Un modo è usare echo
e invia il comando a at
:
echo "command_to_be_run" | at 09:00
Un'altra opzione è usare Here document:
at 09:00 <<END
command_to_be_run
END
Per leggere i comandi da un file invece dello standard input, invoca il comando con -f
opzione seguita dal percorso del file. Ad esempio, per creare un lavoro che esegua lo script /home/linuxize/script.sh
:
at 09:00 -f /home/linuxize/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. Richiama at
con il -M
opzione per sopprimere la notifica e-mail:
at 09:00 -M
Usa il -m
per inviare un'e-mail anche se non c'è output:
at 09:00 -m
batch
Comando #
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 atd
demone. Se la media del carico del sistema è superiore a quella specificata, i lavori rimarranno in coda.
Per creare un lavoro con batch
, passa i comandi che vuoi eseguire:
echo "command_to_be_run" | batch
Specifica del tempo di esecuzione #
Il at
l'utilità accetta un'ampia gamma di specifiche temporali. È possibile specificare ora, data e incremento dall'ora corrente:
-
Tempo - Per specificare un'ora, usa il
HH:MM
oHHMM
modulo. Per indicare un formato orario di 12 ore, usaam
opm
dopo il tempo. Puoi anche usare stringhe comenow
,midnight
,noon
oteatime
(16:00). Trascorso il tempo specificato, il lavoro verrà eseguito il 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. Puoi usare stringhe, come
today
,tomorrow
, o nei giorni feriali. La data può essere indicata anche utilizzando ilMMDD[CC]YY
,MM/DD/[CC]YY
,DD.MM.[CC]YY
o[CC]YY-MM-DD
formati. -
Incremento -
at
accetta anche incrementi innow + 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 per la prossima domenica a un'ora dieci minuti dopo l'ora corrente:
at sunday +10 minutes
-
Pianifica un lavoro da eseguire alle 13:00 tra due giorni:
at 1pm + 2 days
-
Pianifica l'esecuzione di un processo alle 12:30 del 21 ottobre 2020:
at 12:30 102120
-
Pianifica un lavoro da eseguire tra un'ora:
at now +1 hours
Puoi anche specificare un'ora e una data in [[CC]YY]MMDDhhmm[.ss]
usando il -t
opzione. Ecco un esempio:
at -t 202005111321.32
Specifica della coda n.
Per impostazione predefinita, i lavori creati con at
sono programmati nella coda denominata at
e lavori creati con batch
sono programmati nel b
coda.
Le query possono avere un nome da at
a z
e A
a Z
. Le code con lettere più basse vengono eseguite con una precisione inferiore, il che significa che hanno la priorità su quelle con lettere più alte.
Puoi specificare la coda con -q
opzione. Ad esempio, per impostare un lavoro in L
coda, eseguiresti:
at monday +2 hours -q L
Elenco dei lavori in sospeso #
Per elencare i lavori in sospeso dell'utente, eseguire atq
o at -l
comando:
atq
L'output elencherà tutti i lavori, uno per riga. Ciascuna riga include il numero del lavoro, la data, l'ora, la lettera di coda e il nome utente.
9 Tue May 5 12:22:00 2020 a linuxize
12 Wed Oct 21 12:30:00 2020 a linuxize
15 Tue May 5 09:00:00 2020 a linuxize
6 Tue May 5 09:00:00 2020 a linuxize
13 Mon May 4 23:08:00 2020 a linuxize
11 Wed Jul 1 10:00:00 2020 a linuxize
4 Tue May 5 09:00:00 2020 a linuxize
Quando atq
viene richiamato come utente amministrativo, elencherà i lavori in sospeso di tutti gli utenti.
Rimozione lavori in sospeso #
Per rimuovere un lavoro in sospeso, richiamare atrm
o at -r
comando seguito dal numero del lavoro. Ad esempio, per rimuovere il lavoro con il numero nove, eseguire:
atrm 9
Utenti limitati #
Il /etc/at.deny
e /etc/at.allow
i file ti consentono di controllare quali utenti possono creare lavori con at
o batch
comando. I file sono costituiti da un elenco di nomi utente, un nome utente per riga.
Per impostazione predefinita, solo il /etc/at.deny
il file esiste 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 /etc/at.allow
esiste solo gli utenti che sono elencati in questo file possono usare il at
comando.
Se nessuno dei file esiste, solo gli utenti con privilegi di amministratore possono utilizzare at
comando.
Conclusione #
Il at
utility legge i comandi dallo standard input e li esegue in un secondo momento. A differenza di crontab, i lavori creati con at
vengono eseguiti una sola volta.
Per ulteriori informazioni su tutte le opzioni disponibili di at
tipo di comando man at
nel tuo terminale.
Se hai domande, sentiti libero di lasciare un commento.