Jak používat at a dávkovat v Linuxu k plánování příkazů

Pokud chcete naplánovat linuxovou úlohu, která se stane pouze jednou, cron je přehnaný. Rodina příkazů at je to, co potřebujete! A pokud chcete procesy spouštět pouze tehdy, když má váš systém volné prostředky, můžete použít dávkové.

Jak naplánovat úlohy v Linuxu

Cron démon udržuje seznam úloh, které spouští v určitých časech. Tyto úlohy a programy běží na pozadí v naplánovaných časech. To vám nabízí velkou flexibilitu pro plánování úkolů, které je třeba opakovat. Ať už potřebujete spustit úlohu jednou za hodinu, každý den v určitou dobu, nebo jednou za měsíc či rok, můžete to nastavit v cronu.

To však nepomůže, pokud chcete naplánovat spuštění úlohy pouze jednou. Jistě, můžete to nastavit v cronu, ale pak se musíte vrátit a odstranit vstup crontab po provedení úkolu, což je nepohodlné.

Pokud se v Linuxu potýkáte s problémem, je to téměř záruka, že se s ním potýkal i někdo jiný. Naštěstí, protože operační systémy podobné Unixu existují tak dlouho, existuje také skvělá šance, že někdo vytvořil řešení vašeho problému.

Pro výše nastíněný problém mají, a je to tzv. at.

Instalace at Command

Museli jsme nainstalovat na Ubuntu 18.04 a Manjaro 18.1.0 (bylo již nainstalováno na Fedoře 31).

Chcete-li nainstalovat na Ubuntu, použijte tento příkaz:

sudo apt-get install at

The

Po dokončení instalace můžete spustit démona at tímto příkazem:

sudo systemctl enable --now atd.service

The

Na Manjaro nainstalujete pomocí tohoto příkazu:

sudo pacman -Sy at

The

Po dokončení instalace zadejte tento příkaz pro spuštění démona at:

sudo systemctl enable --now atd.service

The

V jakékoli distribuci můžete zadat tento příkaz, abyste se ujistili, že je spuštěn démon atd:

ps -e | grep atd

The

Jak používat at Command interaktivně

Chcete-li použít v, musíte mu přiřadit datum a čas spuštění. Způsob, jakým je můžete psát, je velmi flexibilní, o čemž se budeme věnovat později v tomto článku.

Nicméně, i když budeme používat interaktivně, musíte předem zadat datum a čas. Pokud do příkazového řádku nic neuvedete nebo zadáte něco, co není datum a čas, odpoví „zkomolený čas“, jak je uvedeno níže:

at
at banana

Nesprávné použití

Data a časy mohou být explicitní nebo relativní. Řekněme například, že chcete, aby byl příkaz proveden za minutu. at ví, co znamená „teď“, takže můžete použít now a přidat k tomu jednu minutu, například takto:

at now + 1 minute

The

at vytiskne zprávu a výzvu at a počká, až zadáte příkazy, které chcete naplánovat. Nejprve však zvažte zprávu, jak je uvedeno níže:

  Jak používat funkci online inline překladu aplikace Outlook

The

Řekne vám to při spuštění instance shellu sh a will spusťte příkazy uvnitř. Vaše příkazy se nebudou provádět v prostředí Bash, které je kompatibilní s prostředím sh, ale má bohatší sadu funkcí.

Pokud se vaše příkazy nebo skripty pokusí použít funkci nebo zařízení, které poskytuje Bash, ale sh ne, selžou.

Je snadné otestovat, zda vaše příkazy nebo skripty poběží v sh. Pomocí příkazu sh spusťte shell sh:

sh

The

Příkazový řádek se změní na znak dolaru ($) a nyní můžete spouštět své příkazy a ověřovat, že fungují správně.

Chcete-li se vrátit do prostředí Bash, zadejte příkaz exit:

exit

Neuvidíte žádný standardní výstup nebo chybové zprávy z příkazů. Je to proto, že se shell sh spouští jako úloha na pozadí a běží bez jakéhokoli rozhraní obrazovky.

Jakýkoli výstup z příkazů – dobrý nebo špatný – vám bude zaslán e-mailem. Odesílá se prostřednictvím interního poštovního systému komukoli, kdo spustí příkaz at. To znamená, že musíte nastavit a nakonfigurovat tento interní e-mailový systém.

Mnoho (většina) linuxových systémů nemá interní e-mailový systém, protože je zřídkakdy potřeba. Ti, kteří to dělají, obvykle používají systém jako poslat mail nebo postfix. Pokud váš systém nemá interní e-mailový systém, můžete nechat skripty zapisovat do souborů nebo přesměrovat výstup do souborů a přidat protokolování.

Pokud příkaz negeneruje žádný standardní výstup nebo chybové zprávy, stejně nedostanete e-mail. Mnoho příkazů Linuxu ukazuje na úspěch prostřednictvím ticha, takže ve většině případů nedostanete e-mail.

Nyní je čas zadat příkaz at. V tomto příkladu použijeme malý soubor skriptu s názvem sweep.sh, který odstraní soubory *.bak, *.tmp a *.o. Zadejte cestu k příkazu, jak je znázorněno níže, a stiskněte klávesu Enter.

The

Zobrazí se další příkazový řádek a můžete přidat libovolný počet příkazů. Obvykle je pohodlnější mít své příkazy v jediném skriptu a jednoduše tento skript volat zevnitř at.

Stisknutím Ctrl+D sdělte, že jste dokončili přidávání příkazů. na výstavách , což znamená konec přenosu. Je vám sděleno číslo úlohy a kdy je naplánováno spuštění úlohy, jak je znázorněno níže:

Potvrzení

Po provedení úlohy zadejte následující pro kontrolu interní pošty:

mail

The

Pokud není žádná pošta, musíte předpokládat úspěch. Samozřejmě v tomto případě můžete zkontrolovat a zjistit, zda byly soubory *.bak, *.tmp a *.o smazány, abyste potvrdili, že příkaz fungoval.

Chcete-li celou věc spustit znovu, zadejte následující:

at now + 1 minute

The

Po jedné minutě zadejte následující a znovu zkontrolujte poštu:

mail

The

Ahoj, máme poštu! Chcete-li si přečíst zprávu číslo jedna, stiskněte 1 a poté stiskněte Enter.

Obdrželi jsme e-mail od na, protože příkazy ve skriptu generovaly chybové zprávy. V tomto příkladu nebyly žádné soubory k odstranění, protože když jsme předtím spustili skript, odstranil je.

Stiskněte D+Enter pro odstranění e-mailu a Q+Enter pro ukončení poštovního programu.

Formáty data a času

Máte velkou flexibilitu, pokud jde o formáty času, které můžete použít. Zde je několik příkladů:

  Icecream Image Resizer je nástroj pro změnu velikosti obrázku s předvolbami velikosti

Běží v 11:00:

at 11:00 AM

Běžet zítra v 11:00:

at 11:00 AM tomorrow

Příští týden běžet v 11:00 v tento den:

at 11:00 AM next week

Spustit v tuto dobu, v tento den, příští týden:

at next week

Příští pátek v 11:00:

at 11:00 AM next fri

Příští pátek běžet touto dobou:

at next fri

Spustit v 11:00 v tento den, příští měsíc:

at 11:00 AM next month

Spustit v 11:00 v konkrétní den:

at 11:00 AM 3/15/2020

Spustit za 30 minut od teď:

at now + 30 minutes

Spustit za dvě hodiny:

at now + 2 hours

Zítra běžet touto dobou:

at tomorrow

Ve čtvrtek běžet v tuto dobu:

at thursday

Běží ve 12:00:

at midnight

Běží ve 12:00:

at noon

Pokud jste Brit, můžete dokonce naplánovat spuštění příkazu v době čaje (16:00):

at teatime

Při pohledu na frontu úloh

Chcete-li zobrazit frontu naplánovaných úloh, můžete zadat příkaz atq, jak je znázorněno níže.

Výstup z

Pro každý příkaz ve frontě zobrazí atq následující informace:

ID práce
Plánovaný termín
Naplánovaný čas
Fronta, ve které se úloha nachází. Fronty jsou označeny „a“, „b“ a tak dále. Normální úlohy, které naplánujete v, se zařadí do fronty „a“, zatímco úlohy, které naplánujete pomocí dávky (popsané dále v tomto článku), se zařadí do fronty „b“.
Osoba, která naplánovala práci.

Pomocí v na příkazovém řádku

Nemusíte používat at interaktivně; můžete jej také použít na příkaz. To usnadňuje použití uvnitř skriptů.

Příkazy můžete převést na adresu takto:

echo "sh ~/sweep.sh" | at 08:45 AM

An

Úloha je přijata a naplánována do a číslo úlohy a datum provedení jsou hlášeny stejně jako dříve.

Použití at s Files of Commands

Můžete také uložit sekvenci příkazů do souboru a poté je předat na. Může to být prostý textový soubor příkazů – nemusí to být spustitelný skript.

K předání názvu souboru na adresu můžete použít volbu -f (soubor) následujícím způsobem:

at now + 5 minutes -f clean.txt

An

Stejného výsledku můžete dosáhnout, pokud soubor přesměrujete do:

at now + 5 minutes 

An

Removing Scheduled Jobs from the Queue

To remove a scheduled job from the queue, you can use the atrm command. If you want to see the queue first to find the number of the job you want to remove, you can use atq . Then, use that job number with atrm, as shown below:

atq
atrm 11
atq

Jak zobrazit podrobný pohled na pracovní místa

Jak jsme již zmínili, úlohy můžete plánovat daleko do budoucnosti. Někdy můžete zapomenout, co bude práce dělat. Příkaz atq vám ukáže úlohy ve frontě, ale ne, co budou dělat. Pokud chcete vidět detailní pohled na úlohu, můžete použít volbu -c (cat).

Nejprve použijeme atq k nalezení čísla zakázky:

atq

Výstup z

Nyní použijeme úlohu číslo 13 s volbou -c:

at -c 13

The

Zde je rozpis informací, které o zakázce získáváme:

První řádek: To nám říká, že příkazy poběží pod shellem sh.
Druhý řádek: Vidíme, že příkazy poběží s ID uživatele i skupiny 1000. Toto jsou hodnoty pro osobu, která spustila příkaz at.
Třetí řádek: Osoba, která přijímá jakékoli e-maily, se přihlásí.
Čtvrtý řádek: The Uživatelská maska je 22. Toto je maska ​​používaná k nastavení výchozích oprávnění pro všechny soubory vytvořené v této relaci sh. Maska je odečtena od 666, což nám dává 644 (oktalový ekvivalent rw-r--r--).
Zbývající údaje: Většina jsou proměnné prostředí.

Výstup z

Výsledky testu. Test zkontroluje, zda je možné přistupovat k prováděcímu adresáři. Pokud nemůže, dojde k chybě a provedení úlohy se ukončí.
Příkazy, které mají být provedeny. Tyto jsou uvedeny a zobrazí se obsah skriptů, které jsou naplánovány. Všimněte si, že ačkoli byl skript v našem příkladu výše napsán tak, aby se spouštěl pod Bash, bude stále spuštěn v prostředí sh.

Dávkový příkaz

Dávkový příkaz funguje podobně na příkaz at, ale se třemi významnými rozdíly:

Příkaz batch můžete použít pouze interaktivně.
Namísto plánování úloh, které se mají provést v určitou dobu, je přidáte do fronty a příkaz batch je provede, když je průměrné zatížení systému nižší než 1,5.
Vzhledem k výše uvedenému nikdy neurčujete datum a čas pomocí příkazu batch.

Když použijete dávkový příkaz, zavoláte jej jménem bez parametrů příkazového řádku, jako například:

batch

The

Dále přidejte úkoly stejně jako u příkazu at.

Řízení přístupu k příkazu at

Soubory at.allow a at.deny řídí, kdo může používat rodinu příkazů at. Ty jsou umístěny v adresáři /etc. Ve výchozím nastavení existuje pouze soubor at.deny a je vytvořen při instalaci at.

Funguje to takto:

at.deny: Uvádí aplikace a entity, které nelze použít k plánování úloh.
at.allow: Uvádí, kdo může použít at k plánování úloh. Pokud soubor at.allow neexistuje, použije at pouze soubor at.deny.

Ve výchozím nastavení může kdokoli použít na. Chcete-li omezit, kdo jej může používat, použijte soubor at.allow k zobrazení seznamu těch, kteří mohou. Je to jednodušší než přidat do souboru at.deny všechny, kteří nemohou používat at.

Takto vypadá soubor at.deny:

sudo less /etc/at.deny

The

Soubor obsahuje seznam součástí operačního systému, které nelze použít na. Mnohým z nich je z bezpečnostních důvodů zabráněno, takže nechcete žádné ze souboru odstraňovat.

Nyní upravíme soubor at.allow. Přidáme dave a mary, ale nikdo jiný to nebude moci použít.

Nejprve zadáme následující:

sudo gedit /etc/at.allow

The

V editoru přidáme dva názvy, jak je znázorněno níže, a poté soubor uložíme.

Pokud se někdo jiný pokusí použít na, bude mu řečeno, že nemá povolení. Řekněme například, že uživatel jménem eric zadá následující:

at

Bude odmítnut, jak je uvedeno níže.

Opět platí, že eric není v souboru at.deny. Jakmile vložíte kohokoli do souboru at.allow, bude všem a všem ostatním odepřeno oprávnění k použití at.

Skvělé pro jednorázovky

Jak vidíte, at i batch jsou ideální pro úlohy, které potřebujete spustit pouze jednou. Opět jako rychlá recenze:

Když potřebujete udělat něco, co není běžný proces, naplánujte si to s na.
Pokud chcete spustit úlohu pouze při dostatečně nízkém zatížení systému, použijte dávkové.