Cron je jedním z nejznámějších UNIXismů v počítačovém světě. Dokonce i IT lidé, kteří nespravují linuxové servery, slyšeli o této záhadné bestii, „cron job“. A správci Linuxu vědí, že úlohy cron jsou nekonečně užitečné. Ve skutečnosti je sporné, že cron systém byl raným předchůdcem automatizačního šílenství. Pokud existuje něco, co by člověk mohl zapomenout udělat, cron byla odpověď.
Kde však cron excel je opakování a někdy nepotřebujete, aby úloha běžela každou hodinu, každý den nebo každý týden. Potřebujete jen, aby byla úloha provedena podle plánu, a nastavení budíku, který vám připomene, prostě nevypadá jako způsob UNIX. Co potřebujete, je at command, malý nástroj, který můžete použít k vytvoření fronty úloh naplánovaných ke spuštění at konkrétní čas v budoucnosti.
Nastavení
Před použitím at musíte mít skript shellu, který chcete někdy spustit. Jako obvykle by váš skript měl mít v horní části souboru řádek „magic cookie“ nebo „shebang“, abyste nastavili, který shell se má použít pro jeho spuštění.
Pro tento příklad vytvořte jednoduchý skript, který vytvoří soubor v /tmp :
#!/bin/sh
DATE=`date --utc +%s`
echo "hello world $DATE" | tee /tmp/at.log
exit 0 Udělejte skript spustitelný a poté jej vyzkoušejte:
$ chmod +x test.sh
$ ./test.sh
Prohlédněte si obsah /tmp/at.log soubor vytvořený skript:
$ cat /tmp/at.log
hello world 1588482185 Plánování úlohy
Úlohu můžete naplánovat pomocí časového razítka nebo přirozeného jazyka. Pokud používáte přirozený jazyk nebo jednoduché formáty času, není před zadáním času vyžadována žádná možnost.
Například pro naplánování test.sh chcete-li okamžitě spustit, stačí použít klíčové slovo 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
Odsazení můžete nastavit od teď pomocí minutes , hours , days , weeks nebo 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
years klíčové slovo je nezdokumentované a seconds není podporováno. Můžete také určit běžné časy, například midnight , noon a teatime (to je 16:00).
Jednoduché časy také fungují:
$ at 21:12 -f test.sh
warning: commands will be executed using /bin/sh
job 3 at Mon Feb 24 21:12:00 2020
Chcete-li naplánovat datum kalendáře na konkrétní čas, musíte použít -t možnost a jakýkoli formát času vyhovující POSIX. Například pomocí formátu YYYYMMDDHHMM:
$ at -t 202003141509 -f test.sh
warning: commands will be executed using /bin/sh
job 4 at Sat Mar 14 15:09:00 2020 [ Hledáte pokročilejší automatizaci systému? Začněte s The Automated Enterprise, bezplatnou knihou od Red Hat. ]
Trubky
Příkazy můžete odesílat na adresu at prostřednictvím kanálu 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 Dávkové úlohy
batch příkaz (nebo at -b ) provede příkaz, jakmile to systémové prostředky dovolí. Pokud je zatížení vašeho systému vysoké, můžete použít batch zařadit vaši úlohu do fronty, aby byla spuštěna, když jsou k dispozici cykly CPU.
$ 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 Zobrazení vaší fronty
atq zobrazí váš at fronta. Získáte tak ID úlohy, čas, kdy je každá úloha naplánována ke spuštění, frontu, do které je každá úloha seskupena (a pro at fronta nebo b pro batch fronta) a uživatelské jméno vlastníka fronty. Vlastníkem fronty jste obvykle vy, pokud nepoužíváte atq jako root, v takovém případě uvidíte všechny uživatele at fronty.
$ 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
Své vlastní fronty můžete vytvářet a pojmenovávat pomocí libovolného jediného znaku c-z nebo A–Z . Oba a a b jsou vyhrazená označení pro at a batch a každá fronta s velkým písmenem je považována za batch práce. Fronty s názvy, které následují abecedně za a a b jsou provozovány s rostoucí slušností.
Náhled vaší úlohy
Když odešlete příkaz nebo skript na at , váš aktuální pracovní adresář, prostředí (kromě BASH_VERSINFO , DISPLAY , EUID , GROUPS , SHELLOPTS , TERM , UID a _ ) a umask jsou zachovány. Pokud váš příkaz očekává specifická nastavení prostředí, měli byste je nastavit při předávání příkazu na at nebo je přepište ve skriptu.
Chcete-li zjistit, jak bude váš příkaz probíhat, použijte -c možnost spolu s číslem zakázky:
$ 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
[...] Odebírání úloh
Čekající úlohy můžete odstranit ze svého at fronty pomocí atrm příkaz a ID úlohy. Pokud neznáte ID úlohy, použijte atq pro zobrazení fronty jako první.
$ atq
6 Fri Jan 01 00:00:00 2038 a seth
$ atrm 6
$ atq Plánování pomocí na
at příkaz je trochu jako menší cron Systém. Je to užitečné pro jednorázové spuštění příkazu a jeho použití je snadné. Pokud jste používali cron nebo sleep Chcete-li kompenzovat dobu provádění příkazu, podívejte se na at a batch .
[ Potřebujete se dozvědět více o správě systému Linux? Zvažte absolvování kurzu správy systému Red Hat. ]