Come usare at e batch in Linux per programmare i comandi

Contenuti

Una finestra di terminale su un sistema Linux.

Se vuoi pianificare un lavoro Linux che accadrà solo una volta, cron è esagerato. il at la famiglia di comando è ciò di cui hai bisogno! E se vuoi eseguire processi solo quando il tuo sistema ha risorse libere, Puoi usare batch.

Come pianificare i lavori Linux

il cron il demone tiene un elenco di lavori che esegui in momenti specifici. Queste attività e programmi vengono eseguiti in background all'ora pianificata. Ciò offre una grande flessibilità nella pianificazione delle attività che devono essere ripetute.. Se hai bisogno di eseguire un'attività una volta ogni ora, ad un'ora specifica ogni giorno, o almeno una volta al mese o all'anno, puoi impostarlo su cron.

Nonostante questo, questo non aiuta se vuoi pianificare un'attività da eseguire solo una volta. Certo, puoi impostarlo in cron, ma poi devi ricordarti di tornare indietro e rimuovere il voce crontab dopo l'esecuzione dell'attività, il che è scomodo.

Con Linux, se stai lottando con un ostacolo, è quasi una garanzia che anche qualcun altro abbia litigato con lui. fortunatamente, perché i sistemi operativi simili a Unix sono in circolazione da così tanto tempo, inoltre c'è una grande possibilità che qualcuno abbia creato una soluzione al tuo problema.

Per il problema descritto in precedenza, l'hanno fatto e si chiama at.

IMPARENTATO: Come pianificare le attività in Linux: Introduzione ai file Crontab

Installazione del comando at

Abbiamo dovuto installare at in Ubuntu 18.04 e Manjaro 18.1.0 (era già installato in Fedora 31).

Installare at in Ubuntu, usa questo comando:

sudo apt-get install at

Al termine dell'installazione, puoi iniziare il at demone con questo comando:

sudo systemctl enable --now atd.service

A Manjaro, tu installi at con questo comando:

sudo pacman -Sy at

Al termine dell'installazione, digita questo comando per avviare il at diavolo:

sudo systemctl enable --now atd.service

In qualsiasi distribuzione, puoi digitare questo comando per assicurarti atd il demone è in esecuzione:

ps -e | grep atd

Come usare il comando at in modo interattivo

Utilizzo at, è necessario assegnare una data e un'ora per l'esecuzione. C'è molta flessibilità nel modo in cui puoi scriverli, che tratteremo più avanti in questo post.

Nonostante questo, anche quando useremo at in modo interattivo, è necessario fornire la data e l'ora in anticipo. Se non includi nulla nella riga di comando o scrivi qualcosa che non sia una data e un'ora, at rispondere con “tempo illeggibile”, come mostrato di seguito:

a
alla banana

Le date e gli orari possono essere espliciti o relativi. Come esempio, diciamo che vuoi che un comando venga eseguito entro un minuto. at sa cosa significa “Ora”, quindi puoi usare now e dagli un minuto, Così:

a ora + 1 minuto

at stampa un messaggio e un at e aspetta che tu digiti i comandi che vuoi programmare. Primo, nonostante questo, considera il messaggio, come mostrato di seguito:

Ti dice at avviare un'istanza di sh conchiglia e volontà esegui i comandi al suo interno. I tuoi comandi non verranno eseguiti nella shell bash, che è compatibile con il sh shell ma ha un set di funzioni più ricco.

Se i tuoi comandi o script cercano di utilizzare una funzione o una struttura fornita da Bash, ma sh non è così, avrà esito negativo.

È facile verificare se i tuoi comandi o script verranno eseguiti in sh. Utilizzare il sh comando per avviare a sh guscio:

SH

Il prompt dei comandi cambia in un simbolo di dollaro ($), e ora puoi eseguire i tuoi comandi e verificare che funzionino correttamente.

Per tornare alla shell bash, Scrivi la exit comando:

Uscita

Non vedrai alcun messaggio di errore o output standard dai comandi. Questo è perché sh shell si avvia come attività in background e viene eseguita senza alcuna interfaccia a schermo.

Qualsiasi output dai comandi, bene o male, ti è stato inviato via e-mail. Viene inviato tramite il sistema di posta interno a chi esegue il at comando. Ciò significa che è necessario installare e configurare quel sistema di posta interno.

un sacco di (la maggioranza) dei sistemi Linux non hanno un sistema di posta interno, poiché uno è raramente necessario. Coloro che utilizzano in genere un sistema come inviare una mail oh suffisso. Se il tuo sistema non dispone di un sistema di posta elettronica interno, puoi fare in modo che gli script scrivano su file o reindirizzino l'output su file per aggiungere record.

Se il comando non genera un messaggio di errore o un output standard, non riceverai comunque una mail. Molti comandi di Linux indicano il successo attraverso il silenzio, quindi nella maggior parte dei casi, non riceverai una mail.

IMPARENTATO: Cosa sono gli standard, stdout e stderr in Linux?

Ora è il momento di digitare un comando in at. Per questo esempio, useremo un piccolo file di script chiamato sweep.sh che cancella il *.bak, *.tmp, e *.o record. Inserisci il percorso del comando, come mostrato di seguito, e poi premi Invio.

Viene visualizzato un altro prompt dei comandi e puoi aggiungere tutti i comandi che desideri. Generalmente, è più comodo avere i comandi in un singolo script e chiamare quello script dall'interno at.

Ctrl pressione + D per dire at hai finito di aggiungere comandi. at Spettacoli , significato fine della trasmissione. Ti viene detto il numero del lavoro e quando è programmato per l'esecuzione, come mostrato di seguito:

Dopo l'esecuzione del lavoro, scrivi quanto segue per verificare la tua posta interna:

posta

Se non c'è posta, deve subentrare al successo. Comunque, in questa circostanza, puoi controllare e vedere se *.bak , *.tmp, e *.o I file sono stati rimossi per confermare che il comando ha funzionato.

Digita quanto segue per eseguire di nuovo tutto da capo:

a ora + 1 minuto

Dopo un minuto, scrivi quanto segue per ricontrollare la tua posta:

posta

¡Oye, abbiamo posta! Per leggere il messaggio numero uno, premere 1 e poi premi Invio.

Abbiamo ricevuto un'email da at perché i comandi nello script hanno generato messaggi di errore. In questo esempio, non c'erano file da rimuovere perché quando abbiamo eseguito lo script in precedenza, li ha eliminati.

Premi D + Invio per rimuovere l'e-mail e Q + Invio per uscire dal programma di posta.

Formati di data e ora

Hai molta flessibilità quando si tratta dei formati di tempo che puoi usare con at. Ecco alcuni esempi:

  • Corri a 11:00 sono:
  • Corri domani alle 11:00 sono:
  • Corri a 11:00 un. m. Da questo giorno della prossima settimana:
  • Corri a quest'ora, in questo giorno, la prossima settimana:
  • Corri a 11:00 sono venerdì prossimo:
  • Corri a quest'ora venerdì prossimo:
  • Corri a 11:00 sono in questa data, il prossimo mese:
  • Corri a 11:00 sono in una data specifica:
  • Corri dentro 30 minuti:
  • Esegui entro due ore:
  • Corri domani a quest'ora:
  • Corri a quest'ora giovedì:
  • Corri a 12:00 sono:
  • Corri a 12:00 pm:
  • Se sei britannico, puoi anche programmare un comando da eseguire all'ora del tè (4 P. M.):

Guardando la coda di lavoro

Puoi scrivere il atq comando per visualizzare la coda dei lavori pianificati, come mostrato di seguito.

Per ogni comando in coda, atq mostra le informazioni successive:

  • Identificazione del lavoro
  • Appuntamento programmato
  • Orario pianificato
  • Coda dove c'è il lavoro. Le code sono etichettate come “un”, “B”, eccetera. Attività normali con cui pianifichi at entrare in coda “un”, mentre le attività con cui pianifichi batch (di cui parleremo più avanti in questo post) entrare in coda “B”.
  • La persona che ha programmato il lavoro.

Utilizzo di at sulla riga di comando

Non dovresti usare at in modo interattivo; puoi anche usarlo nel comando. Ciò semplifica l'utilizzo di script interni.

Puoi reindirizzare i comandi a at, come questo:

eco "sh ~/sweep.sh" | a 08:45 SONO

Il lavoro viene accettato e programmato da at, e il numero del lavoro e la data di esecuzione sono riportati come prima.

IMPARENTATO: Come usare Pipes su Linux

Usa a con gli script

Puoi anche memorizzare uno script in un file e poi passarlo a at. Può essere un semplice file di script di testo, non deve essere uno script eseguibile.

Puoi usare il -f (file) come segue per passare un nome di file a at:

a ora + 5 minuti -f clean.txt

Puoi ottenere lo stesso risultato se reindirizzi il file a at:

a ora + 5 minuti < clean.txt

Rimozione dei lavori pianificati dalla coda

Per rimuovere un lavoro pianificato dalla coda, puoi usare il atrm comando. Se vuoi vedere prima la coda per trovare il numero del lavoro che vuoi rimuovere, Puoi usare atq . Successivamente, usa quel numero di lavoro con atrm, Come mostrato di seguito:

e
atrm 11
e

Come visualizzare una vista dettagliata dei lavori

Come abbiamo già detto in precedenza, può programmare lavori in futuro. Qualche volta, potresti dimenticare cosa sta per fare un lavoro. il atq Il comando visualizza i lavori in coda, ma non quello che stanno per fare. Se vuoi vedere una vista dettagliata di un lavoro, puoi usare il -c (gatto) opzione.

Primo, noi useremo atq per trovare il numero di lavoro:

e

Ora, useremo il numero di lavoro 13 con il -c opzione:

a -c 13

Ecco una ripartizione delle informazioni che otteniamo sul lavoro:

  • Prima linea: Questo ci dice che i comandi verranno eseguiti sotto il sh guscio.
  • Seconda linea: Vediamo che i comandi verranno eseguiti con un ID utente e gruppo di 1000. Questi sono i valori per chi ha gestito la at comando.
  • Terza riga: La persona che riceve le email. atInviare.
  • Quarta riga: il Maschera utente è 22. Questa è la maschera che viene utilizzata per determinare i permessi predefiniti per qualsiasi file creato in questo sh sessione. La maschera viene sottratta da 666, cosa ci dà 644 (l'identico ottale di rw-r--r--).
  • Dati rimanenti: La maggior parte sono variabili d'ambiente.

  • Risultati di un test. Un test verifica che la directory di esecuzione possa essere inserita. Se non può, viene generato un errore e l'esecuzione del lavoro viene abbandonata.
  • I comandi da eseguire. Questi sono elencati e viene visualizzato il contenuto degli script pianificati. Nota che anche se lo script nel nostro esempio sopra è stato scritto per essere eseguito in Bash, funzionerà ancora su a sh guscio.

Il comando batch

il batch comando funziona allo stesso modo al at comando, ma con tre differenze significative:

  1. Puoi usare solo il batch comando in modo interattivo.
  2. Invece di pianificare i lavori da eseguire in un momento specifico, li aggiunge alla coda e il batch Il comando li esegue quando il carico medio del sistema è inferiore a 1,5.
  3. A causa di quanto sopra, non specificare mai una data e un'ora con il batch comando.

Quando usi il batch comando, lo chiama per nome senza parametri della riga di comando come questo:

lotto

Prossimo, aggiungi attività proprio come faresti con il at comando.

Controlla l'accesso al comando at

il at.allow e at.deny i file controllano chi può usare il at comando famiglia. Questi si trovano all'interno del /etc directory. Predefinito, solo il at.deny il file esiste e viene creato quando at è installato.

Ecco come funzionano:

  • at.deny: Elenca le applicazioni e le entità che non possono essere utilizzate at programmare i lavori.
  • at.allow: Elenchi che possono usare at programmare i lavori. Se lui at.allow Il file non esiste, at basta usare il at.deny procedimento.

Per impostazione predefinita, chiunque può usare at. Se vuoi limitare chi può usarlo, usa el at.allow file per elencare quelli che possono. È più facile che aggiungere tutti quelli che non possono usare at al at.deny procedimento.

Questo è ciò at.deny il file sembra:

sudo less /etc/at.deny

Il file elenca i componenti del sistema operativo che non possono utilizzare at. Molti di questi non sono in grado di farlo per motivi di sicurezza, quindi non vuoi rimuovere nessuno dei file.

Ora, modificheremo il at.allow procedimento. Aggiungiamo dave e mary, ma nessun altro sarà in grado di usare at.

Primo, scriviamo quanto segue:

sudo gedit /etc/at.allow

Nell'editor, aggiungiamo i due nomi, come mostrato di seguito, e poi salviamo il file.

Se qualcun altro cerca di usare at, ti diranno che non hai il permesso. Come esempio, diciamo un utente di nome eric scrivi quanto segue:

a

verrebbe rifiutato, come mostrato di seguito.

Ancora, eric Non è nel at.deny procedimento. Non appena metti qualcuno in at.allow file, a tutti gli altri viene negata l'autorizzazione all'uso at.

Ottimo per occasioni eccezionali

Come potete vedere, entrambi at e batch sono ideali per le attività che devi eseguire solo una volta. Ancora, come una rapida recensione:

  • Quando devi fare qualcosa di diverso da una normale procedura, programma con at.
  • Se vuoi eseguire un'attività solo quando il carico del sistema è sufficientemente basso, utilizzo batch.

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.