107.2 Lezione 2
Certificazione: |
LPIC-1 |
---|---|
Versione: |
5.0 |
Argomento: |
107 Attività Amministrative |
Obiettivo: |
107.2 Automatizzare le attività di amministrazione del sistema attraverso la pianificazione |
Lezione: |
2 di 2 |
Introduzione
Come hai imparato nella lezione precedente, puoi pianificare dei lavori regolari usando cron
o i timer di systemd; a volte però potresti aver bisogno di eseguire un’attività solo per una volta in un momento specifico nel futuro. Per fare questo, puoi usare un’altra potente utility: il comando at
.
Programmare attività con at
Il comando at
è usato per la pianificazione di un’attività una tantum e richiede solo che si specifichi quando il lavoro deve essere eseguito in futuro. Dopo aver inserito at
sulla linea di comando seguito dalla specifica del tempo, si accede al prompt at
dove si possono definire i comandi da eseguire. È possibile uscire dal prompt con la sequenza di tasti Ctrl+D.
$ at now +5 minutes warning: commands will be executed using /bin/sh at> date at> Ctrl+D job 12 at Sat Sep 14 09:15:00 2019
L’attività at
nell’esempio precedente esegue semplicemente il comando date
dopo cinque minuti. Simile a cron
, lo standard output ed error vengono inviati via e-mail. Si noti che il demone atd
dovrà essere in esecuzione sul sistema per poter utilizzare la pianificazione at
.
Note
|
In Linux, il comando |
Le opzioni più importanti che si applicano al comando at
sono:
-c
-
Stampa i comandi di uno specifico ID lavoro allo standard output.
-d
-
Elimina i lavori in base al loro ID. È un alias di
atrm
. -f
-
Legge il lavoro da un file invece che dallo standard input.
-l
-
Elenca i lavori in sospeso dell’utente. Se l’utente è root, vengono elencati tutti i lavori di tutti gli utenti. È un alias di
atq
. -m
-
Invia una mail all’utente alla fine del lavoro anche se non c’è stato alcun output.
-q
-
Specifica una coda sotto forma di una singola lettera da
a
az
e daA
aZ
(di defaulta
perat
eb
perbatch
). I lavori nelle code con le lettere più alte sono eseguiti con priorità più alta. I lavori inviati a una coda con una lettera maiuscola sono trattati come lavoribatch
. -v
-
Mostra il tempo in cui il lavoro verrà eseguito prima della lettura del lavoro.
Mostrare i Lavori Pianificati con atq
Programmiamo altri due lavori at
: il primo esegue lo script foo.sh
alle 09:30, mentre il secondo esegue lo script bar.sh
dopo un’ora.
$ at 09:30 AM warning: commands will be executed using /bin/sh at> ./foo.sh at> Ctrl+D job 13 at Sat Sep 14 09:30:00 2019 $ at now +2 hours warning: commands will be executed using /bin/sh at> ./bar.sh at> Ctrl+D job 14 at Sat Sep 14 11:10:00 2019
Per elencare i lavori in sospeso, puoi usare il comando atq
che mostra le seguenti informazioni per ogni lavoro: ID del lavoro, data di esecuzione del lavoro, tempo di esecuzione del lavoro, coda e nome utente.
$ atq 14 Sat Sep 14 11:10:00 2019 a frank 13 Sat Sep 14 09:30:00 2019 a frank 12 Sat Sep 14 09:15:00 2019 a frank
Ricorda che il comando at -l
è un alias di atq
.
Note
|
Se si esegue |
Rimuovere i Lavori Pianificati con atrm
Se vuoi cancellare un lavoro at
, puoi usare il comando atrm
seguito dall’ID del lavoro. Per esempio, per cancellare il lavoro con ID 14, puoi eseguire quanto segue:
$ atrm 14
Puoi cancellare più lavori con atrm
specificando più ID separati da spazi. Ricorda che il comando at -d
è un alias di atrm
.
Note
|
Se esegui |
Configurare l’Accesso alla Pianificazione delle Attività
L’autorizzazione per gli utenti ordinari a pianificare lavori con at
è determinata dai file /etc/at.allow
e /etc/at.deny
. Se /etc/at.allow
esiste, solo gli utenti non root elencati in esso possono pianificare lavori con at
. Se /etc/at.allow
non esiste ma esiste /etc/at.deny
, solo gli utenti non-root elencati al suo interno non possono pianificare lavori con at
(in questo caso un file /etc/at.deny
vuoto significa che ogni utente è autorizzato a pianificare lavori con at
). Se nessuno di questi file esiste, l’accesso dell’utente alla pianificazione dei lavori at
dipende dalla distribuzione usata.
Specifiche di Tempo
Puoi specificare quando eseguire un particolare lavoro at
usando il formato HH:MM
, opzionalmente seguito da AM o PM nel caso del formato a 12 ore. Se l’ora specificata è già passata, il lavoro si attiverà il giorno successivo. Se vuoi programmare una data particolare in cui il lavoro venga eseguito, devi aggiungere le informazioni sulla data dopo l’ora usando una delle seguenti forme: nome mese giorno del mese
, nome mese giorno del mese anno
, MMDDYY
, MM/DD/YYY
, DD.MM.YY
e YYYY-MM-DD
).
Sono accettate anche le seguenti parole chiave: midnight
, noon
, teatime
(4 pm) e now
seguita da un segno più (+
) e un periodo di tempo (minuti, ore, giorni e settimane). Infine, puoi dire a at
di eseguire il lavoro oggi o domani aggiungendo al tempo le parole today
o tomorrow
. Per esempio, puoi usare at 07:15 AM Jan 01
per eseguire un lavoro alle 07:15 del 01 Gennaio e at now +5 minutes
per eseguire un lavoro tra cinque minuti. Puoi leggere il file timespec
all’interno di /usr/share
per maggiori informazioni sulla definizione esatta delle specifiche temporali.
Una Alternativa a at
Usando systemd come gestore del sistema e dei servizi, si possono anche programmare compiti una tantum con il comando systemd-run
. È tipicamente usato per creare un’unità timer transitoria in modo che un comando venga eseguito in un momento specifico senza la necessità di creare un file di servizio. Per esempio, agendo come root, è possibile eseguire il comando date
alle 11:30 AM del 2019/10/06 utilizzando quanto segue:
# systemd-run --on-calendar='2019-10-06 11:30' date
Se vuoi eseguire lo script foo.sh
, situato nella tua directory di lavoro corrente dopo due minuti puoi usare:
# systemd-run --on-active="2m" ./foo.sh
Consulta le pagine del manuale per imparare tutti i possibili usi di systemd-run
con systemd-run(1)
.
Note
|
Ricorda che i timer sono registrati nel journal di systemd e che puoi rivedere i log delle diverse unità usando il comando |
Esercizi Guidati
-
Per ciascuna delle seguenti specifiche temporali, indicare quale è valida e quale non è valida per
at
:at 08:30 AM next week
at midday
at 01-01-2020 07:30 PM
at 21:50 01.01.20
at now +4 days
at 10:15 PM 31/03/2021
at tomorrow 08:30 AM
-
Una volta che hai programmato un lavoro con
at
, come puoi rivedere i suoi comandi? -
Quali comandi puoi usare per rivedere i lavori
at
in sospeso? Quali comandi useresti per cancellarli? -
Con systemd, quale comando è usato come alternativa a
at
?
Esercizi Esplorativi
-
Crea un lavoro
at
che esegua lo scriptfoo.sh
, situato nella tua home directory, alle 10:30 del 31 Ottobre prossimo. Supponiamo che tu stia agendo come un utente ordinario. -
Accedi al sistema come un altro utente ordinario e crea un altro lavoro
at
che esegua lo scriptbar.sh
domani alle 10:00. Supponiamo che lo script si trovi nella home directory dell’utente. -
Accedi al sistema come un altro utente ordinario e crea un altro lavoro
at
che esegue lo scriptfoobar.sh
dopo 30 minuti. Supponiamo che lo script si trovi nella home directory dell’utente. -
Ora, come root, esegui il comando
atq
per esaminare i lavori programmatiat
di tutti gli utenti. Che cosa succede se un utente normale esegue questo comando? -
Come root, cancella tutti questi lavori in sospeso
at
con un solo comando. -
Esegui il comando
ls -l /usr/bin/at
ed esamina i suoi permessi.
Sommario
In questa lezione abbiamo imparato:
-
Usare
at
per eseguire lavori una tantum in un momento specifico. -
Gestire i lavori
at
. -
Configurare l’accesso degli utenti alla programmazione dei lavori
at
. -
Usare
systemd-run
come alternativa aat
.
I seguenti comandi e file sono stati discussi in questa lezione:
at
-
Esegue i comandi in un momento specifico.
atq
-
Elenca i lavori
at
in sospeso dell’utente, a meno che l’utente non sia il superutente. atrm
-
Elimina i lavori
at
, identificati dal loro numero di lavoro. /etc/at.allow
and/etc/at.deny
-
File particolari usati per impostare le restrizioni
at
. systemd-run
-
Crea e avvia un’unità transitoria
timer
come alternativa aat
per la programmazione una tantum.
Risposte agli Esercizi Guidati
-
Per ciascuna delle seguenti specifiche temporali, indicare quale è valida e quale non è valida per
at
:at 08:30 AM next week
Valida
at midday
Non Valida
at 01-01-2020 07:30 PM
Non Valida
at 21:50 01.01.20
Valida
at now +4 days
Valida
at 10:15 PM 31/03/2021
Non Valida
at tomorrow 08:30 AM monotonic
Non Valida
-
Una volta che hai programmato un lavoro con
at
, come puoi rivedere i suoi comandi?Puoi usare il comando
at -c
seguito dall’ID del lavoro di cui vuoi esaminare i comandi. Nota che l’output contiene anche la maggior parte dell’ambiente che era attivo nel momento in cui il lavoro è stato pianificato. Ricorda che root può esaminare i lavori di tutti gli utenti. -
Quali comandi puoi usare per rivedere i lavori
at
in sospeso? Quali comandi useresti per cancellarli?Puoi usare il comando
at -l
per rivedere i tuoi lavori in sospeso, e puoi usare il comandoat -d
per cancellare i tuoi lavori.at -l
è un alias peratq
eat -d
è un alias peratrm
. Ricorda che root può elencare e cancellare i lavori di tutti gli utenti. -
Con systemd, quale comando è usato come alternativa a
at
?Il comando
systemd-run
può essere usato come alternativa aat
per programmare lavori una tantum. Per esempio, puoi usarlo per eseguire comandi in un momento specifico, definendo un calendar timer o un monotonic timer relativo a diversi punti di partenza.
Risposte agli Esercizi Esplorativi
-
Crea un lavoro
at
che esegua lo scriptfoo.sh
, situato nella tua home directory, alle 10:30 del 31 Ottobre prossimo. Supponiamo che tu stia agendo come un utente ordinario.$ at 10:30 AM October 31 warning: commands will be executed using /bin/sh at> ./foo.sh at> Ctrl+D job 50 at Thu Oct 31 10:30:00 2019
-
Accedi al sistema come un altro utente ordinario e crea un altro lavoro
at
che esegue lo scriptbar.sh
domani alle 10:00. Supponiamo che lo script si trovi nella home directory dell’utente.$ at 10:00 AM tomorrow warning: commands will be executed using /bin/sh at> ./bar.sh at> Ctrl+D job 51 at Sun Oct 6 10:00:00 2019
-
Accedi al sistema come un altro utente ordinario e crea un altro lavoro
at
che esegue lo scriptfoobar.sh
dopo 30 minuti. Supponiamo che lo script si trovi nella home directory dell’utente.$ at now +30 minutes warning: commands will be executed using /bin/sh at> ./foobar.sh at> Ctrl+D job 52 at Sat Oct 5 10:19:00 2019
-
Ora, come root, esegui il comando
atq
per esaminare i lavori programmatiat
di tutti gli utenti. Cosa succede se un utente normale esegue questo comando?# atq 52 Sat Oct 5 10:19:00 2019 a dave 50 Thu Oct 31 10:30:00 2019 a frank 51 Sun Oct 6 10:00:00 2019 a emma
Se si esegue il comando
atq
come root, vengono elencati tutti i lavoriat
pendenti di tutti gli utenti. Se lo esegui come utente ordinario, vengono elencati solo i tuoi lavoriat
in sospeso. -
Come root, cancella tutti questi lavori in sospeso
at
con un solo comando.# atrm 50 51 52
-
Come root, esegui il comando
ls -l /usr/bin/at
ed esamina i suoi permessi.# ls -l /usr/bin/at -rwsr-sr-x 1 daemon daemon 43762 Dec 1 2015 /usr/bin/at
In questa distribuzione, il comando
at
ha entrambi i bit SUID (il caratteres
invece del flag eseguibile per il proprietario) e SGID (il caratteres
invece del flag eseguibile per il gruppo) impostati, il che significa che viene eseguito con i privilegi del proprietario e del gruppo del file (daemon
per entrambi). Questo è il motivo per cui gli utenti ordinari sono in grado di pianificare lavori conat
.