Tutoriel Linux

Naplánovat jedinečný příkaz v systému Linux bez vytváření trvalého úkolu cron

Débutant3 min de lecture

Musíte spustit příkaz pouze jednou dnes večer, zítra ráno nebo po okně údržby? at zabraňuje vytvoření cron úlohy, na kterou potom zapomenete. Má však jednu podmínku: služba atd musí běžet a příkaz bude vykonán pomocí /bin/sh, nikoli nutně vaším interaktivním shellem.

Metoda níže umožňuje naplánovat, kontrolovat a poté odstranit úlohu před jejím provedením. Použijte absolutní cestu pro skripty a logy. Úloha at nevyužívá váš terminál ani vaše bash nastavení.

Tux u serveru, hodin a kalendáře pro naplánování jednorázového příkazu v Linuxu
Služba atd provádí jednorázový příkaz v naplánovaném čase.

Nainstalujte at a zkontrolujte službu

Na Debianu, Ubuntu a jejich derivátech nainstalujte balík a poté aktivujte démon. Na Fedora, RHEL nebo Rocky Linux nahraďte apt za dnf.

sudo apt update
sudo apt install at
sudo systemctl enable --now atd
systemctl status atd --no-pager

Status musí ukazovat active (running). Pokud váš účet dostane odmítnutí, zkontrolujte /etc/at.allow a /etc/at.deny. Tyto soubory určují, které uživatelské účty mají právo odesílat úlohy.

Naplánujte příkaz bez vytvoření cron

Pro testování bez ovlivnění systému vytvořte malý soubor ve vašem domovském adresáři za pět minut. Zadejte příkaz a poté ukončete zadávání pomocí Ctrl + D.

at now + 5 minutes
mkdir -p "$HOME/at-test"
date > "$HOME/at-test/executed-at.txt"
# poté stiskněte Ctrl+D

Pro skutečnou intervenci se vyvarujte relativních cest. Následující úloha restartuje službu zítra v 02:30 a uchovává stdout a stderr v známém logu:

at 02:30 tomorrow
/usr/bin/systemctl restart my-service.service >> /var/log/my-service-at.log 2>&1
# poté stiskněte Ctrl+D

Neplánujte restart nebo vzdálenou změnu, aniž byste příkaz nejdříve zkontrolovali ručně. Pokud pracujete přes SSH, držte otevřenou druhou relaci před změnou, která by mohla přerušit síť nebo službu.

Přečtěte si úlohu a zkontrolujte čas na stroji

atq zobrazuje čekající úlohy s jejich identifikátory. at -c ukazuje skutečně zaregistrovaný skript. Tato kontrola je užitečná, když proměnná, aktuální adresář nebo přesměrování rozhodují o vašem příkazu.

atq
at -c 7
timedatectl status

Nahraďte 7 číslem zobrazeným příkazem atq. Zkontrolujte také časové pásmo pomocí timedatectl status. Datum zadané v at je interpretováno strojem, který vykonává démon. Server nastavený na UTC nutně nespustí úlohu v čase zobrazeném na vašem počítači.

Zrušení úlohy před jejím provedením

Odstranění je okamžité. Získejte id, odstraňte úlohu a poté znovu spusťte atq, abyste potvrdili, že zmizela.

atrm 7
atq

Použijte at pro jednorázovou akci: úklid po migraci, jednorázový restart nebo odložený test. Pro opakující se úlohu raději používejte cron a crontab nebo systemd timer. V hlavní roli se vyhnete přetváření jednorázového příkazu na zapomenutou automatizaci.