Tutoriel Linux

Anacron w systemie Linux: wznawianie zadania po wyłączeniu komputera

Débutant5 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

Planujesz wykonanie kopii zapasowej na 2:00 w nocy, ale laptop jest wtedy wyłączony. W przypadku standardowego zadania cron, wykonanie jest po prostu tracone. anakron

Rezerwuję go do zadań codziennych, tygodniowych lub miesięcznych, które tolerują opóźnienia. W przypadku konkretnych godzin, wykonywanie zadań co dziesięć minut lub zaawansowane monitorowanie przez dział, cron i timery systemd pozostają bardziej odpowiednie.

Tux uruchamia ponownie komputer i nadrabia zaległości w planowanym tworzeniu kopii zapasowej za pomocą programu Anacron
Anacron wykonuje opóźnione zadanie przy następnym uruchomieniu, gdy upłynie jego limit czasu.

Wybór między cronem, anacronem i timerem systemd

Wybór zależy przede wszystkim od wymaganej dokładności i czasu rozruchu maszyny:

  • cron nadaje się do urządzenia włączanego o zaplanowanej porze i z częstotliwością mniejszą niż raz dziennie;
  • anakron pracuje w ciągu kilku dni i po okresie odpoczynku nadrabia zaległości w realizacji zadań dziennych, tygodniowych lub miesięcznych;
  • A zegar systemowy zapewnia bardziej precyzyjny harmonogram Trwały=prawdazależności i logi bezpośrednio związane z usługą.

Anacron nie zastępuje crona wszędzie. Nie próbuje wykonać polecenia dokładnie o 8:30. Sprawdza, czy minęła określona liczba dni, odczekuje skonfigurowane opóźnienie, uruchamia polecenie, a następnie zapisuje datę. Czas ostatniego wykonania nie jest uwzględniany w obliczeniach.

Na stacji roboczej lub małym serwerze, który nie pracuje nieprzerwanie, często wystarcza. Na serwerze zarządzanym za pomocą systemd, przewodnik po oferuje bardziej elastyczne rozwiązanie nowego zadania.

Zainstaluj Anacron i odczytaj istniejącą konfigurację

W systemie Debian lub Ubuntu zainstaluj pakiet, a następnie sprawdź dostępną wersję:

sudo apt update
sudo apt install anacron
anakron-V

W systemach Fedora, Rocky Linux lub AlmaLinux implementacja jest zazwyczaj dostarczana przez rodzinę pakietów Cronie. Przed modyfikacją sprawdź zainstalowany pakiet:


polecenie -v anacron

Następnie wyświetl plik główny bez jego edycji:

sudo cat /etc/anacrontab
sudo ls -l /var/spool/anacron

systemctl status anacron.service --no-pager
systemctl list-timers --all | grep -i anacron
sudo grep -R "anacron" /etc/cron.d /etc/cron.* 2>/dev/null

Dodaj codzienne zadanie z kopią zapasową

Zacznij od zapisania konfiguracji. Wystąpił błąd /etc/anacrontab może uniemożliwić uwzględnienie następujących zadań.

sudo cp /etc/anacrontab /etc/anacrontab.bak-$(data +%F-%H%M)
sudo nano /etc/anacrontab

Na przykład dodaj poniższy wiersz, aby wywołać skrypt kopii zapasowej, który został już przetestowany:

1 15 backup-home /usr/local/sbin/backup-home.sh >> /var/log/backup-home.log 2>&1

Każde z czterech pól ma określoną rolę:

  • jeden definiuje okres jednego dnia;
  • piętnaście dodaje piętnaście minut opóźnienia po uruchomieniu Anacrona;
  • zapasowy dom jest unikalnym identyfikatorem używanym do znakowania czasu i rejestrowania;

Używaj ścieżek bezwzględnych w skrypcie. Środowisko zaplanowanego zadania nie jest takie samo, jak środowisko sesji interaktywnej. Przed wykonaniem jakiejkolwiek kopii sprawdź również, czy dysk docelowy jest zamontowany. Kopia zapasowa, która omyłkowo zapisuje dane w prostym folderze lokalnym, może zapełnić partycję główną, nie chroniąc żadnych danych.

Sprawdź składnię, a następnie uruchom kontrolowany test

Najpierw przetestuj sam skrypt. Musi być wykonywalny, generować oczekiwany wynik i zwracać kod różny od zera w przypadku błędu:

sudo test -x /usr/local/sbin/backup-home.sh
sudo /usr/local/sbin/backup-home.sh
powtórzyć $?

Następnie zweryfikuj plik anacrontab bez uruchamiania zadania:

sudo anacron -T

zapasowy dom nie czekając na termin lub okres, użyj:

sudo anacron -f -n -d backup-home

To polecenie faktycznie uruchamia skrypt. Nie testuj go za pomocą usuwania ani synchronizacji. --usuwać lub operację nieodwracalną. Opcje wymuszają zadanie, anulują opóźnienie i pozostawiają Anacrona na pierwszym planie, aby wyświetlał swoją aktywność.

Znajdź szczegóły wykonania w dziennikach i znaczniku czasu

Po teście należy najpierw sprawdzić wynik biznesowy, na przykład obecność i datę zapisania plików. Znacznik czasu w anacron potwierdza jedynie, że polecenie zostało uruchomione i ukończone.

sudo stat /var/spool/anacron/backup-home

W przypadku dystrybucji z jednostką systemd zobacz także:

sudo journalctl -u anacron.service -n 80 --no-pager
sudo journalctl -t anacron -n 80 --no-pager

Jeśli te polecenia pozostają puste, często sprawdzaj dziennik cron dystrybucji /var/log/syslog na Debianie lub Ubuntu i /var/log/cron o rodzinie RHEL. Przewodnik po journalctl i dzienniki uruchamiania pomoc w przywróceniu procesu wyzwalania po rozruchu.

Ważny szczegół, o którym należy pamiętać: Anacron rejestruje datę zakończenia polecenia, nawet jeśli skrypt nie działa. Nie staje się systemem odzyskiwania po błędzie. Skrypt musi rejestrować wynik, sprawdzać wymagania wstępne i wysyłać alert, jeśli zadanie jest krytyczne.

Ograniczenia, o których należy pamiętać przed zastąpieniem zadania cron

Nie używaj Anakrona do zadań, które muszą się rozpocząć o określonej minucie. Jego okres jest liczony w dniach, a opóźnienie rozpoczyna się od momentu uruchomienia Anakrona. Po kilku dniach przestoju każdy opóźniony identyfikator jest wykonywany raz, a nie raz na każdy dzień, w którym nastąpiło przerwanie.

Nie przenoś istniejącego zadania przed zidentyfikowaniem jego użytkownika. /etc/anacrontab jest zazwyczaj przetwarzany z uprawnieniami roota. Polecenie skopiowane z crontab użytkownika może następnie utworzyć pliki z niewłaściwym właścicielem lub uzyskać dostęp do danych, których nie powinno modyfikować.

Tam Strona podręcznika Anacrona dokumentuje opcje testowania i wykonywania. Podręcznik Anacrontabu Określ pola dla okresu, opóźnienia, identyfikatora i kolejności. Zachowaj stare zadanie cron w komentarzu na cały cykl, sprawdź rzeczywisty wynik zadania, a następnie usuń je dopiero po zakończeniu procesu nadrabiania zaległości.

sudo apt update && sudo apt upgrade