Tutoriel Linux

Zaprogramować pojedynczą komendę w systemie Linux bez tworzenia stałej zadania cron

Débutant3 min de lecture

Czy musisz uruchomić polecenie tylko raz dzisiaj wieczorem, jutro rano lub po oknie konserwacyjnym? at unika tworzenia zadania cron, które potem zapomnisz. Ma jednak jedną wadę: usługa atd musi działać, a polecenie zostanie wykonane przez /bin/sh, a niekoniecznie przez twoją interaktywną powłokę.

Poniższa metoda pozwala zaplanować, kontrolować, a potem usunąć zadanie przed jego wykonaniem. Użyj absolutnej ścieżki do skryptów i plików logów. Zadanie at nie korzysta z twojego terminala ani z żadnych ustawień Bash.

Tux obok serwera, zegara i kalendarza do programowania pojedynczej komendy w systemie Linux
Usługa atd wykonuje pojedyncze polecenie o zaplanowanej godzinie.

Zainstaluj at i sprawdź usługę

Na Debianie, Ubuntu oraz ich pochodnych zainstaluj pakiet, a następnie włącz demon. Na Fedory, RHEL lub Rocky Linux, zastąp apt przez dnf.

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

Status powinien wskazywać active (running). Jeśli twoje konto jest odrzucane, sprawdź /etc/at.allow i /etc/at.deny. Te pliki określają, którzy użytkownicy mają prawo do przesyłania zadań.

Zaplanowanie polecenia bez pozostawienia crona

Aby przetestować bez dotykania systemu, stwórz mały folder w swoim katalogu domowym za pięć minut. Wprowadź polecenie, a następnie zakończ wprowadzanie przez Ctrl + D.

at now + 5 minutes
mkdir -p "$HOME/at-test"
date > "$HOME/at-test/executed-at.txt"
# następnie naciśnij Ctrl+D

Dla rzeczywistej interwencji, unikaj ścieżek względnych. Następujące zadanie restaruje usługę jutro o 02:30 i zachowa stdout oraz stderr w znanym logu:

at 02:30 tomorrow
/usr/bin/systemctl restart moja-usługa.service >> /var/log/moja-usługa-at.log 2>&1
# następnie naciśnij Ctrl+D

Nie planuj ponownego uruchomienia ani zdalnej modyfikacji bez ręcznego sprawdzenia polecenia. Jeśli pracujesz przez SSH, trzymaj otwartą zdalną sesję przed zmianą, która może przerwać sieć lub usługę.

Ponownie sprawdź zadanie i kontroluj czas maszyny

atq wyświetla oczekujące zadania z ich identyfikatorem. at -c pozwala zobaczyć rzeczywisty zarejestrowany skrypt. Ta lektura jest przydatna, gdy zmienna, bieżący katalog lub przekierowanie mają znaczenie dla twojego polecenia.

atq
at -c 7
timedatectl status

Zmień 7 na numer wyświetlony przez atq. Sprawdź także strefę czasową za pomocą timedatectl status. Data wprowadzona do at jest interpretowana przez maszynę wykonującą demon. Serwer ustawiony na UTC nie uruchomi zadania o czasie wyświetlanym na twoim komputerze.

Anuluj zadanie przed jego wykonaniem

Usunięcie jest natychmiastowe. Weź identyfikator, usuń zadanie, a następnie ponownie uruchom atq, aby potwierdzić, że zniknęło.

atrm 7
atq

Używaj at do jednorazowego działania: czyszczenie po migracji, jednorazowe ponowne uruchomienie lub opóźnione testowanie. Dla powtarzającego się zadania lepiej użyć crona i crontab lub timera systemd. Unikniesz głównie przekształcania jednorazowego polecenia w zapomnianą automatyzację.

sudo apt update && sudo apt upgrade