Cron
è uno degli UNIXismi più riconoscibili del mondo dei computer. Anche gli informatici che non amministrano i server Linux hanno sentito parlare di quella misteriosa bestia, il "cron job". E gli amministratori Linux sanno che i lavori cron sono infinitamente utili. In effetti, è discutibile che il cron
sistema è stato uno dei primi capostipite della mania dell'automazione. Se c'era qualcosa che sapevi che un essere umano potrebbe dimenticare di fare, cron
era la risposta.
Tuttavia, dove cron
excels è ripetizione e, a volte, non è necessario un lavoro da eseguire ogni ora o ogni giorno o ogni settimana. Hai solo bisogno di un lavoro da eseguire nei tempi previsti e l'impostazione di un allarme per ricordarti non sembra il modo UNIX. Quello che ti serve è il at
command, una piccola utilità che puoi utilizzare per creare una coda di lavori pianificati per l'esecuzione at un momento specifico nel futuro.
Configurazione
Prima di utilizzare il at
comando, è necessario disporre di uno script di shell che si desidera avviare prima o poi. Come al solito, il tuo script dovrebbe avere una riga "magic cookie" o "shebang" nella parte superiore del file per impostare quale shell utilizzare per la sua esecuzione.
Per questo esempio, crea un semplice script che crea un file in /tmp
:
#!/bin/sh
DATE=`date --utc +%s`
echo "hello world $DATE" | tee /tmp/at.log
exit 0
Rendi lo script eseguibile e poi esegui un test:
$ chmod +x test.sh
$ ./test.sh
Visualizza il contenuto del /tmp/at.log
file lo script creato:
$ cat /tmp/at.log
hello world 1588482185
Pianificazione di un lavoro
È possibile pianificare un lavoro utilizzando un timestamp o con il linguaggio naturale. Se utilizzi il linguaggio naturale o semplici formati dell'ora, non è richiesta alcuna opzione prima di specificare l'ora.
Ad esempio, per programmare test.sh
per eseguire immediatamente, puoi semplicemente utilizzare la parola chiave now
:
$ at now -f test.sh
warning: commands will be executed using /bin/sh
job 1 at Mon Feb 24 01:23:00 2020
$ cat /tmp/at.log
hello world 1588482620
Puoi impostare un offset da adesso utilizzando minutes
, hours
, days
, weeks
o years
.
$ at now + 1 day -f test.sh
warning: commands will be executed using /bin/sh
job 2 at Tue Feb 25 01:27:00 2020
Gli years
la parola chiave non è documentata e seconds
non è supportato. Puoi anche specificare orari comuni, come midnight
, noon
e teatime
(sono le 16:00).
Anche i tempi semplici funzionano:
$ at 21:12 -f test.sh
warning: commands will be executed using /bin/sh
job 3 at Mon Feb 24 21:12:00 2020
Per programmare una data di calendario a un'ora specifica, devi utilizzare il -t
opzione e qualsiasi formato dell'ora conforme a POSIX. Ad esempio, utilizzando il formato AAAAMMGGHHMM:
$ at -t 202003141509 -f test.sh
warning: commands will be executed using /bin/sh
job 4 at Sat Mar 14 15:09:00 2020
[ Cerchi un'automazione del sistema più avanzata? Inizia con The Automated Enterprise, un libro gratuito di Red Hat. ]
Tubi
Puoi inviare comandi a at
tramite una pipe UNIX:
$ echo "hello world" > /tmp/at.log | at now
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 24 01:28:00 2020
$ cat /tmp/at.log
hello world
Lavori in batch
Il batch
comando (o at -b
) esegue un comando non appena le risorse di sistema lo consentono. Se il carico del tuo sistema è elevato, puoi utilizzare batch
per accodare il tuo lavoro in modo che venga eseguito quando ci sono cicli di CPU da risparmiare.
$ echo "Cycles to spare" > /tmp/at.log | batch
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 24 01:31:00 2020
Visualizzazione della tua coda
Il atq
comando mostra il tuo at
fare la coda. Questo ti dà l'ID lavoro, l'ora in cui è pianificata l'esecuzione di ogni lavoro, la coda in cui è raggruppato ogni lavoro (at
per il at
coda o b
per il batch
coda) e il nome utente del proprietario della coda. Il proprietario della coda di solito sei tu, a meno che tu non stia eseguendo atq
come root, nel qual caso vedrai tutti i at
di tutti gli utenti code.
$ atq
2 Tue Feb 25 01:27:00 2020 a seth
3 Mon Feb 24 21:12:00 2020 a seth
4 Sat Mar 14 15:09:00 2020 a seth
5 Mon Feb 24 01:31:00 2020 b seth
Puoi creare e assegnare un nome alle tue code utilizzando qualsiasi singolo carattere c-z o A-Z . Entrambi at
e b
sono designazioni riservate per at
e batch
e qualsiasi coda con una lettera maiuscola viene trattata come un batch
lavoro. Code con nomi che seguono in ordine alfabetico at
e b
vengono eseguiti con sempre maggiore gentilezza.
Anteprima del tuo lavoro
Quando invii un comando o uno script a at
, la directory di lavoro corrente, l'ambiente (escluso BASH_VERSINFO
, DISPLAY
, EUID
, GROUPS
, SHELLOPTS
, TERM
, UID
e _
), e l'umask vengono mantenuti. Se il tuo comando prevede impostazioni ambientali specifiche, dovresti impostarle mentre passi il comando a at
o sovrascriverli nel tuo script.
Per vedere come verrà eseguito il tuo comando, usa -c
opzione insieme al numero del lavoro:
$ at -c 4
#!/bin/sh
# atrun uid=1006 gid=1006
# mail seth 0
umask 22
CPLUS_INCLUDE_PATH=/usr/lib64/qt/include; export CPLUS_INCLUDE_PATH
MANPATH=/usr/local/man:/usr/man:/usr/lib64/adoptopenjdk12.0.2/man; export MANPATH
KDE_MULTIHEAD=false; export KDE_MULTIHEAD
[...]
Rimozione dei lavori
Puoi rimuovere i lavori in sospeso dal tuo at
fare la coda usando atrm
comando e l'ID lavoro. Se non conosci l'ID lavoro, usa atq
per visualizzare prima la tua coda.
$ atq
6 Fri Jan 01 00:00:00 2038 a seth
$ atrm 6
$ atq
Programmazione con a
Il at
comando è un po' come un cron
minore sistema. È utile per l'esecuzione di comandi una tantum ed è facile da usare. Se hai utilizzato cron
o sleep
per compensare il tempo di esecuzione di un comando, dai un'occhiata a at
e batch
.
[ Hai bisogno di saperne di più sull'amministrazione del sistema Linux? Prendi in considerazione un corso di amministrazione di sistema Red Hat. ]