at
je nástroj příkazového řádku, který vám umožňuje naplánovat provádění příkazů v určitý čas. Úlohy vytvořené pomocí at
jsou provedeny pouze jednou.
V tomto článku vysvětlíme, jak používat at
a jeho doprovodné nástroje batch
, atq
, atrm
pro zobrazení, odstranění a vytvoření úloh, které mají být provedeny později.
Instalace at
#
V závislosti na distribuci at
může nebo nemusí být přítomen ve vašem systému Linux.
Pokud at
není nainstalován, můžete jej snadno nainstalovat pomocí správce balíčků vaší distribuce.
-
Nainstalujte
at
na Ubuntu a Debianusudo apt update
sudo apt install at
-
Nainstalujte
at
na CentOS a Fedořesudo yum install at
Jakmile je program nainstalován, ujistěte se, že atd
, plánovací démon běží a je nastaven na spuštění při spouštění:
sudo systemctl enable --now atd
Jak používat at
Příkaz #
Zjednodušená syntaxe pro at
příkaz je následující:
at [OPTION...] runtime
at
příkaz přebírá datum a čas (runtime
), když chcete provést úlohu jako parametr příkazového řádku a příkaz, který se má provést ze standardního vstupu.
Vytvořme úlohu, která bude provedena v 9:00:
at 09:00
Jakmile stisknete Enter
, zobrazí se vám at
příkazový řádek, který nejčastěji začíná at>
. Zobrazí se také varování, které vám sdělí shell, ve kterém bude příkaz spuštěn:
warning: commands will be executed using /bin/sh
at>
Zadejte jeden nebo více příkazů, které chcete provést:
tar -xf /home/linuxize/file.tar.gz
Po zadání příkazů stiskněte Ctrl-D
pro ukončení výzvy a uložení úlohy:
at> <EOT>
job 4 at Tue May 5 09:00:00 2020
Příkaz zobrazí číslo úlohy a čas a datum provedení.
Existují také další způsoby, jak předat příkaz, který chcete spustit, kromě zadání příkazu do at
výzva. Jedním ze způsobů je použití echo
a přesměrujte příkaz do at
:
echo "command_to_be_run" | at 09:00
Další možností je použít dokument Here:
at 09:00 <<END
command_to_be_run
END
Chcete-li číst příkazy ze souboru namísto standardního vstupu, vyvolejte příkaz pomocí -f
možnost následovaná cestou k souboru. Chcete-li například vytvořit úlohu, která bude spouštět skript /home/linuxize/script.sh
:
at 09:00 -f /home/linuxize/script.sh
Ve výchozím nastavení, pokud příkaz vytváří výstup, at
po dokončení úlohy odešle uživateli e-mail s výstupem. Vyvolejte at
s -M
možnost potlačení e-mailového upozornění:
at 09:00 -M
Použijte -m
odeslat e-mail, i když není žádný výstup:
at 09:00 -m
batch
Příkaz #
batch
nebo jeho alias at -b
naplánuje úlohy a provede je v dávkové frontě, když to úroveň zatížení systému dovolí. Ve výchozím nastavení jsou úlohy prováděny, když je průměrná zátěž systému nižší než 1,5. Hodnotu zatížení lze zadat při vyvolání atd
démon. Pokud je průměr zatížení systému vyšší než zadaný, úlohy budou čekat ve frontě.
Chcete-li vytvořit úlohu pomocí batch
, předejte příkazy, které chcete provést:
echo "command_to_be_run" | batch
Určení času provedení #
at
utilita akceptuje širokou škálu časových specifikací. Můžete zadat čas, datum a přírůstek od aktuálního času:
-
Čas - Chcete-li zadat čas, použijte
HH:MM
neboHHMM
formulář. Chcete-li uvést 12hodinový formát času, použijteam
nebopm
po čase. Můžete také použít řetězce jakonow
,midnight
,noon
neboteatime
(16:00). Pokud zadaný čas uplyne, úloha bude provedena následující den. -
Datum - Příkaz umožňuje naplánovat provedení úlohy na daný den. Datum lze zadat pomocí názvu měsíce následovaného dnem a volitelným rokem. Můžete použít řetězce, například
today
,tomorrow
, nebo všední den. Datum lze také uvést pomocíMMDD[CC]YY
,MM/DD/[CC]YY
,DD.MM.[CC]YY
nebo[CC]YY-MM-DD
formátů. -
Přírůstek -
at
také přijímá přírůstky vnow + count time-unit
formát, kdecount
je číslo atime-unit
může být jeden z následujících řetězců:minutes
,hours
,days
neboweeks
.
Čas, datum a přírůstek lze kombinovat, zde je několik příkladů:
-
Naplánujte si úlohu na nadcházející neděli o deset minut později, než je aktuální čas:
at sunday +10 minutes
-
Naplánujte spuštění úlohy ve 13:00 za dva dny:
at 1pm + 2 days
-
Naplánujte spuštění úlohy na 21. října 2020 ve 12:30:
at 12:30 102120
-
Naplánujte spuštění úlohy za hodinu:
at now +1 hours
Můžete také zadat čas a datum v [[CC]YY]MMDDhhmm[.ss]
pomocí -t
volba. Zde je příklad:
at -t 202005111321.32
Zadání fronty č.
Ve výchozím nastavení jsou úlohy vytvořeny pomocí at
jsou naplánovány ve frontě s názvem a
a úlohy vytvořené pomocí batch
jsou naplánovány v b
fronta.
Dotazy mohou mít název z a
do z
a A
do Z
. Fronty s nižšími písmeny běží s nižší přesností, což znamená, že mají přednost před těmi s vyššími písmeny.
Frontu můžete určit pomocí -q
volba. Chcete-li například nastavit úlohu v L
fronty, spustíte:
at monday +2 hours -q L
Výpis čekajících zakázek #
Chcete-li zobrazit seznam čekajících úloh uživatele, spusťte atq
nebo at -l
příkaz:
atq
Výstup zobrazí všechny úlohy, jednu na řádek. Každý řádek obsahuje číslo úlohy, datum, čas, písmeno ve frontě a uživatelské jméno.
9 Tue May 5 12:22:00 2020 a linuxize
12 Wed Oct 21 12:30:00 2020 a linuxize
15 Tue May 5 09:00:00 2020 a linuxize
6 Tue May 5 09:00:00 2020 a linuxize
13 Mon May 4 23:08:00 2020 a linuxize
11 Wed Jul 1 10:00:00 2020 a linuxize
4 Tue May 5 09:00:00 2020 a linuxize
Když atq
je vyvolán jako administrátor, zobrazí seznam čekajících úloh všech uživatelů.
Odebírání čekajících úloh #
Chcete-li odstranit čekající úlohu, vyvolejte atrm
nebo at -r
příkaz následovaný číslem úlohy. Chcete-li například odstranit úlohu s číslem devět, spustili byste:
atrm 9
Omezení uživatelů #
Soubor /etc/at.deny
a /etc/at.allow
soubory umožňují řídit, kteří uživatelé mohou vytvářet úlohy pomocí at
nebo batch
příkaz. Soubory se skládají ze seznamu uživatelských jmen, jedno uživatelské jméno na řádek.
Ve výchozím nastavení pouze /etc/at.deny
soubor existuje a je prázdný, což znamená, že všichni uživatelé mohou použít at
příkaz. Pokud chcete odepřít oprávnění konkrétnímu uživateli, přidejte uživatelské jméno do tohoto souboru.
Pokud /etc/at.allow
soubor existuje pouze uživatelé, kteří jsou uvedeni v tomto souboru, mohou použít at
příkaz.
Pokud žádný ze souborů neexistuje, mohou at
používat pouze uživatelé s oprávněními správce příkaz.
Závěr č.
at
obslužný program čte příkazy ze standardního vstupu a provádí je později. Na rozdíl od crontab, úlohy vytvořené pomocí at
jsou provedeny pouze jednou.
Další informace o všech dostupných možnostech at
typ příkazu man at
ve vašem terminálu.
Pokud máte nějaké dotazy, neváhejte zanechat komentář.