Pianificare un comando perché venga eseguito in un momento preciso del futuro è un’abilità utilissima in mille situazioni amministrative. Il comando che lo fa è at. In questo articolo vediamo la modalità interattiva, quella non interattiva e come ispezionare e cancellare i job in coda.
Installazione
Se at non è installato sul tuo sistema lo installi con apt:
sudo apt-get install at
at si appoggia a un demone, atd, che sorveglia la lista dei job e li esegue quando è il momento. Come tutti i demoni si può fermare, avviare e riavviare, ad esempio con systemctl:
sudo systemctl status atd
La modalità interattiva
Il modo più semplice di usare at è la modalità interattiva: si scrive at e come argomento si indica il momento del futuro in cui vogliamo eseguire il comando. Il modo più flessibile è dare l’ora esatta con -t, che vuole un timestamp nella forma [[CC]YY]MMDDhhmm. Per esempio, per il 6 novembre 2023 alle 23:28:
at -t 202311062328
Premendo invio si entra nell’editor interattivo di at, dove si scrivono i comandi da eseguire. Il compito di esempio è semplicissimo: scrivere una stringa in un file.
echo "ciao dal futuro" > prova.txt
Quando abbiamo finito di dare i comandi premiamo Ctrl+D per uscire dall’editor. Possiamo scrivere anche più righe: si possono pianificare comandi complessi, di più righe, quanto vogliamo.
Per vedere l’elenco dei job programmati:
at -l
Arrivata l’ora, controlliamo se il file è stato creato:
cat prova.txt
La modalità non interattiva
L’altro modo è dare i comandi a at tramite una pipe. Qui bisogna stare un po’ più attenti: si usa echo per scrivere il comando da eseguire, fra virgolette, e lo si manda in pipe ad at. Per avere un effetto simile a prima:
echo "echo Ciao mondo > prova2.txt" | at now + 1 minute
Qui l’indicazione di tempo è un altro costrutto: now significa ora, e now + 1 minute significa “fra un minuto”. Il job viene messo in coda e dobbiamo solo aspettare che lo scheduler lo esegua. Passato il minuto:
cat prova2.txt
Passare i comandi in pipe è più macchinoso e va bene solo per comandi molto semplici. Per sequenze di comandi più complesse ti consiglio decisamente la modalità interattiva.
Ispezionare ed eliminare I job
Pianifichiamo un comando con la forma sintetica: per l’orario usiamo midnight, cioè mezzanotte. Vogliamo scrivere su prova3.txt cinque minuti dopo mezzanotte:
echo "echo Ciao dalla mezzanotte > prova3.txt" | \
at midnight + 5 minutes
Il comando viene schedulato per mezzanotte e cinque minuti. La coda si vede con atq (equivale ad at -l):
atq
L’output ha una riga per job, con il numero del job, la data, l’ora e l’utente. Per esempio il job numero 19. Per vedere esattamente cosa farà quel job, comprese le variabili d’ambiente che usa e l’utente con cui verrà eseguito, si usa at -c:
at -c 19
Se il comando non ci interessa più lo togliamo dalla coda con atrm:
atrm 19
Rilanciando atq vediamo che la coda è vuota. Così, con atrm, si rimuove uno qualunque dei job in coda.
In sintesi
I comandi da ricordare sono pochi: at per pianificare (in modalità interattiva, oppure con una pipe), atq o at -l per vedere la coda, at -c per ispezionare un job, atrm per eliminarlo. Ci sono tante opzioni avanzate, ma per cominciare a sperimentare bastano queste.
Link e risorse
- il video su YouTube
- esempi e comandi della puntata su GitHub
- at, man page — at, atq, atrm e batch
- atd, man page — il demone che esegue i job
- at, specifica POSIX — il formato del tempo
- Cron, Wikipedia — l’alternativa per i lavori periodici, in italiano
Sostieni il canale
PER SOSTENERE IL CANALE BASTANO UN LIKE E UN’ISCRIZIONE!
questi link sono affiliati Amazon, acquistando i libri che ti consiglio sostieni il canale!
