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. ]