Tutoriel Linux

Anacron onder Linux: een taak hervatten nadat de machine was uitgeschakeld.

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.

Je plant een back-up in voor 2:00 uur ’s nachts, maar de laptop staat op dat tijdstip uit. Met een standaard cronjob gaat de uitvoering dan gewoon verloren. anacron Het systeem reageert op dit specifieke geval door de taak bij de volgende opstart uit te voeren zodra het merkt dat de periode is verlopen.

Ik reserveer het voor dagelijkse, wekelijkse of maandelijkse taken die een vertraging kunnen verdragen. Voor specifieke tijden, uitvoering om de tien minuten of geavanceerde monitoring per afdeling, blijven cron- en systemd-timers geschikter.

Tux herstart een computer en haalt een geplande back-up in met Anacron.
Anacron voert een uitgestelde taak uit bij de volgende opstart, wanneer de time-outperiode is verlopen.

Kiezen tussen cron, anacron en een systemd-timer

De keuze hangt voornamelijk af van de vereiste nauwkeurigheid en de opstarttijd van de machine:

  • cron geschikt voor een machine die op het geplande tijdstip wordt ingeschakeld en voor frequenties van minder dan één keer per dag;
  • anacron werkt in dagen en haalt na een rustperiode de dagelijkse, wekelijkse of maandelijkse taken in;
  • A systemd-timer biedt een nauwkeuriger schema Permanent=waarAfhankelijkheden en logboeken die direct verband houden met een service.

Anacron vervangt cron niet overal. Het probeert niet om een ​​commando precies om 8:30 uur ’s ochtends uit te voeren. Het controleert of het opgegeven aantal dagen is verstreken, wacht de ingestelde vertraging af, voert het commando uit en registreert vervolgens de datum. Het tijdstip van de laatste uitvoering wordt niet meegenomen in de berekening.

Op een werkstation of een kleine server die niet continu draait, is dit vaak voldoende. Op een server die al met systemd wordt beheerd, is de handleiding op de website van de betreffende website van belang. systemd-timers Biedt een flexibelere oplossing voor een nieuwe taak.

Installeer Anacron en lees de bestaande configuratie.

Installeer het pakket op Debian of Ubuntu en controleer vervolgens welke versie beschikbaar is:


sudo apt install anacron
anacron -V

Op Fedora, Rocky Linux of AlmaLinux wordt de implementatie meestal geleverd door de Cronie-pakketfamilie. Controleer het geïnstalleerde pakket voordat u iets wijzigt:

rpm -q cronie cronie-anacron
commando -v anacron

Geef vervolgens het hoofdbestand weer zonder het te bewerken:

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

Het eerste bestand beschrijft de taken. De tweede locatie bevat de tijdstempels ervan. Afhankelijk van de distributie kan anacron worden geactiveerd door cron, een systemd-service of bij het opstarten. Controleer wat er daadwerkelijk aanwezig is:

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

Voeg een dagelijkse taak toe met een back-up.

Begin met het opslaan van de configuratie. Een fout in /etc/anacrontab Dit kan ertoe leiden dat de volgende taken niet in aanmerking worden genomen.

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

Voeg bijvoorbeeld deze regel toe om een ​​back-upscript aan te roepen dat al is getest:

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

De vier velden hebben elk een specifieke rol:

  • een definieert een periode van één dag;
  • vijftien Voegt vijftien minuten vertraging toe nadat Anacron is gestart;
  • back-up-thuis is de unieke identificatiecode die wordt gebruikt voor tijdstempels en logboekregistratie;
  • Het laatste veld bevat de volledige bestelling.

Gebruik absolute paden in het script. De omgeving van een geplande taak is niet hetzelfde als uw interactieve sessie. Controleer ook of de doelschijf is aangekoppeld voordat u begint met kopiëren. Een back-up die per ongeluk naar een eenvoudige lokale map schrijft, kan de rootpartitie volmaken zonder gegevens te beschermen.

Controleer de syntaxis en voer vervolgens een gecontroleerde test uit.

Test eerst het script zelf. Het moet uitvoerbaar zijn, het verwachte resultaat opleveren en een niet-nul-code retourneren als het mislukt:

sudo test -x /usr/local/sbin/backup-home.sh
sudo /usr/local/sbin/backup-home.sh
echo $?

Valideer vervolgens het anacrontab-bestand zonder de taak uit te voeren:

Het ontbreken van uitvoer met een retourcode van nul geeft aan dat de syntaxis is geaccepteerd. Om alleen de taak uit te voeren back-up-thuis Gebruik zonder de deadline of periode af te wachten:

sudo anacron -f -n -d backup-home

Deze opdracht start daadwerkelijk het script. Test het niet met een verwijderings- of synchronisatieopdracht. --verwijderen of een onomkeerbare bewerking. De opties dwingen de taak af, annuleren de vertraging en houden Anacron op de voorgrond om de activiteit ervan weer te geven.

sudo stat /var/spool/anacron/backup-home
sudo tail -n 80 /var/log/backup-home.log

Zie ook voor distributies met een systemd-unit:

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

Als deze opdrachten leeg blijven, controleer dan het cron-logboek van de distributie. /var/log/syslog op Debian of Ubuntu en journalctl en opstartlogboeken Helpt om het triggerproces na het opstarten te herstellen.

Een belangrijk detail om te onthouden: Anacron registreert de datum waarop de opdracht is voltooid, zelfs als uw script is mislukt. Het wordt geen foutcorrectiesysteem. Het script moet zijn resultaat loggen, de vereisten controleren en een waarschuwing verzenden als de taak kritiek is.

Beperkingen waar je rekening mee moet houden voordat je een cronjob vervangt

Verplaats een bestaande taak niet voordat de gebruiker is geïdentificeerd. /etc/anacrontab Een opdracht wordt doorgaans uitgevoerd met rootrechten. Een commando dat is gekopieerd uit de crontab van een gebruiker kan dan bestanden aanmaken met de verkeerde eigenaar of toegang krijgen tot gegevens die het niet zou mogen aanraken.

Daar Anacron handleidingpagina documenteert de test- en uitvoeringsopties. Anacrontab-handleiding Specificeer de velden voor periode, vertraging, identificatie en volgorde. Laat de oude cronjob een volledige cyclus uitgeschakeld (door er een commentaar van te maken), controleer de daadwerkelijke uitvoer van de taak en verwijder deze pas wanneer het inhaalproces werkt.

sudo apt update && sudo apt upgrade