In un prececente articolo Ho parlato dei comandi cron e crontab che sono il modo standard per pianificare le cose ricorrenti su un sistema Gnu/Linux.
Ma a volte è necessario fare una cosa ad una specifica data ed ora per una volta sola e per queste attività l’opzione migliore è di usare at
, un altro modo di utilizzare at
è per eseguire un comando più tardi quando il computer non sarà troppo carico.
O un altro motivo potrebbe essere che si desidera eseguire un comando che richiede un sacco di tempo per finire e dovete disconnettervi dal server, at
potrebbe essere utilizzato in questa situazione, ma per queste attività vi suggerisco di dare un’occhiata agli articoli su come eseguire comandi in background e l’ utilità screen
Quindi l’idea del comando at
è di facilitare “la programmazione di una azione per una volta”. In questo senso è complementare a cron
che solitamente viene utilizzato per pianificare processi periodici, vediamo ora i suoi più comuni utilizzi
Il comando at
fa parte di una serie di quattro comandi che includono i comandi at
, batch
, atq
, e atrm
:
- at esegue i comandi in un momento specificato.
- atq elenca i lavori in attesa dell’utente, a meno che l’utente non sia il superutente; in tal caso, tutti i lavori sono elencati.
- atrm elimina uno dei lavori in attesa, identificati dal loro numero.
- batch esegue comandi quando permesso dal livello di carico del sistema, in altre parole, quando il carico medio scende sotto 1.5, o il valore specificato nella chiamata di
atd
.
uso base del comando at
at
richiede il comando da eseguire. Dopo aver inserito il comando, premere ctrl-D per terminare, queste sono le principali opzioni che è possibile utilizzare con il comando at
:
at [-m] [-q coda] [-f file] TIME |
E questo è quello che significano:
-q coda
utilizza la coda specificata. Una indicazione per una di coda è costituita da una singola lettera; le denominazioni di coda valide vanno da a z e dalla A alla Z. La coda a è quella predefinita perat
e b come coda per batch. Code con lettere superiori saranno eseguite con maggiore niceness, ovvero minore priorità. La coda speciale “=” è riservata per i lavori che sono attualmente in esecuzione. Se un lavoro viene inviato a una coda indicata con una lettera maiuscola, è considerato come se fosse stato mandato al comando batch in quel momento. Se il comando atq è dato con una coda specifica, mostrerà solo i lavori in attesa in quella coda.-m
Invia una mail all’utente quando il lavoro è completato, anche se non non c’era alcun output.-f file
Legge il lavoro dal file indicato anziché dallo standard input.TIME
At permette specifiche di tempo abbastanza complesse, che estendono POSIX.2. Accetta tempistiche nel formato hh:mm per eseguire un lavoro in un momento specifico del giorno. Si può anche dire in che giorno verrà eseguito il lavoro, dando una data nella forma nome del mese il giorno con l’anno facoltativo, o dando una data nella forma MMGGAA o GG/MM/AA o GG.MM.YY. La specifica di una data deve seguire le specifiche del momento nella giornata.
Esempi:
Mentre facevo i test questa era l’esatta data
#date Wed Oct 17 22:31:05 CEST 2012 |
Così dando solo l’orario sarà pianificato per la prossima volta che quell’orario sarà raggiunto, in questo esempio, chiedo di pianificare un processo per le 20.00 e così sarà elaborato il giorno seguente in quell’orario:
#at -f my_at_test.sh 20:00 warning: commands will be executed using /bin/sh job 4 at Thu Oct 18 20:00:00 2012 |
Mentre dando un’orario che deve essere ancora raggiunto nella giornata, il lavoro viene pianificato per la setssa giornata a quell’orario.
#at -f my_at_test.sh 22:35 warning: commands will be executed using /bin/sh job 5 at Wed Oct 17 22:35:00 2012 |
E questo è un altro esempio che utilizza ctrl-D per terminare:
at midnight Friday warning: commands will be executed using /bin/sh at> cp -a /project/source/* /backup/source/^C at> job 6 at Fri Oct 19 00:00:00 2012 |
Mostrare tutti i processi pianificati utilizzando atq
È possibile utilizzare il comando atq
o come alternativa a -l
, per visualizzare tutti i lavori pianificati o attualmente in esecuzione, l’unica opzione disponibile con questo comando è -q per specificare una particolare coda.
#atq 3 Thu Oct 18 10:25:00 2012 a linuxaria 4 Thu Oct 18 20:00:00 2012 a linuxaria 6 Fri Oct 19 00:00:00 2012 a linuxaria |
Questo output non è così utile secondo me, in quanto non si vede che cosa fa il task numero 3 o gli altri. Per vedere il contenuto di un lavoro pianificato, è possibile utilizzare
a -c jobnumber |
questo vi darà un lungo output che mostrerà l’ambiente completo di comando e il comando stesso:
#at -c 6 #!/bin/sh # atrun uid=1000 gid=1000 # mail linuxaria 0 umask 22 SSH_AGENT_PID=1579; export SSH_AGENT_PID XDG_SESSION_COOKIE=586bed7d66c5f3bf0810f6ce0000001c-1350495018.439467-8023144; export XDG_SESSION_COOKIE WINDOWID=25165830; export WINDOWID GNOME_KEYRING_CONTROL=/tmp/keyring-m0UVoj; export GNOME_KEYRING_CONTROL USER=linuxaria; export USER LIBGL_DRIVERS_PATH=/usr/lib/fglrx/dri:/usr/lib32/fglrx/dri; export LIBGL_DRIVERS_PATH SSH_AUTH_SOCK=/tmp/ssh-DbbUjzXR1501/agent.1501; export SSH_AUTH_SOCK USERNAME=riccio; export USERNAME SESSION_MANAGER=local/mint-desktop:@/tmp/.ICE-unix/1501,unix/mint-desktop:/tmp/.ICE-unix/1501; export SESSION_MANAGER DEFAULTS_PATH=/usr/share/gconf/default.default.path; export DEFAULTS_PATH XDG_CONFIG_DIRS=/etc/xdg/xdg-default:/etc/xdg; export XDG_CONFIG_DIRS PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games; export PATH DESKTOP_SESSION=default; export DESKTOP_SESSION PWD=/tmp; export PWD GNOME_KEYRING_PID=1424; export GNOME_KEYRING_PID LANG=en_US.UTF-8; export LANG MANDATORY_PATH=/usr/share/gconf/default.mandatory.path; export MANDATORY_PATH MDM_XSERVER_LOCATION=local; export MDM_XSERVER_LOCATION SHLVL=1; export SHLVL HOME=/home/linuxaria; export HOME LOGNAME=linuxaria; export LOGNAME XDG_DATA_DIRS=/usr/share/default:/usr/local/share/:/usr/share/:/usr/share/mdm/; export XDG_DATA_DIRS DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-QWgLeCbkps,guid=b1c32f270937311ee26524ff00000031; export DBUS_SESSION_BUS_ADDRESS MDMSESSION=default; export MDMSESSION WINDOWPATH=8; export WINDOWPATH MDM_LANG=en_US.UTF-8; export MDM_LANG XAUTHORITY=/home/linuxaria/.Xauthority; export XAUTHORITY COLORTERM=gnome-terminal; export COLORTERM cd /tmp || { echo 'Execution directory inaccessible' >&2 exit 1 } cp -a /project/source/* /backup/source/^C |
Questo è molto meglio capire esattamente che cosa farà un comando.
Rimuovere un processo pianificato utilizzando atrm
Ora abbiamo visto l’elenco dei comandi pianificati con at
e facoltativamente il contenuto, ora è il momento di vedere come eliminarli, per questo possiamo usare il comando atrm jobnumber
o at -d jobnumber
, per eliminare un particolare lavoro. Così per rimuovere l’operazione pianificata numero 3 dovete solo digitare
atrm 3 |
. Questo non darà alcun output sulla riga di comando, ma se eseguite nuovamente atq
, vedrete che è stata eliminata l’operazione pianificata selezionata.
Limitare l’utilizzo di at per alcuni utenti
I file /etc/at.allow e /etc/at.deny determinano quali utenti possono inviare comandi per una esecuzione successiva via at
o batch
.
Il formato dei file è un semplice elenco di nomi utente, uno su ogni linea. Gli spazi vuoti non sono consentiti.
Root può usare sempre at
. Se esiste il file /etc/at.allow, solo i nomi menzionati in esso sono autorizzati a utilizzarlo, normalmente non esiste.
Se non esiste /etc/at.allow, /etc/at.deny è utilizzato, questo file di solito contiene una lunga lista di “utenti di sistema” come bin, backup, ftp o www-data.
Popular Posts:
- None Found
I use at frequently: 1)with only 1.5 mbit of download bandwidth, downloading a linux ISO can take quite a while for me. So I do it when my local network has the least traffic, and I do it while I sleep. 2)recording radio shows using streamripper.