Tutoriel Linux

Programmeer een unieke opdracht onder Linux zonder een permanente cron-taak aan te maken

Débutant3 min de lecture

Moet u een opdracht eenmaal vanavond, morgenochtend of na een onderhoudsvenster uitvoeren? at voorkomt dat u een cron-taak maakt die u later vergeet. Het heeft echter een beperking: de atd dienst moet draaien, en het commando wordt uitgevoerd door /bin/sh, niet per se door uw interactieve shell.

De onderstaande methode maakt het mogelijk om een taak te plannen, te controleren en deze vóór uitvoering te annuleren. Gebruik een absoluut pad voor scripts en logbestanden. Een at-taak heeft geen toegang tot uw terminal of al uw Bash-instellingen.

Tux naast een server, een klok en een kalender om een unieke opdracht onder Linux te plannen
De atd service voert een unieke opdracht uit op het geplande tijdstip.

Installeer at en controleer de service

Op Debian, Ubuntu en hun afgeleiden, installeert u het pakket en activeert u de daemon. Op Fedora, RHEL of Rocky Linux vervangt u apt door dnf.

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

De status moet active (running) aangeven. Als uw account wordt geweigerd, controleer dan /etc/at.allow en /etc/at.deny. Deze bestanden bepalen welke gebruikers het recht hebben om taken in te dienen.

Plan een opdracht zonder cron achter te laten

Om te testen zonder het systeem aan te raken, maakt u een klein bestand in uw persoonlijke map over vijf minuten. Voer het commando in en beëindig de invoer met Ctrl + D.

at now + 5 minutes
mkdir -p "$HOME/at-test"
date > "$HOME/at-test/executed-at.txt"
# druk dan op Ctrl+D

Voor een echte interventie, vermijd relatieve paden. De volgende taak start een dienst morgen om 02:30 en bewaart stdout en stderr in een bekend logbestand:

at 02:30 tomorrow
/usr/bin/systemctl restart mijn-dienst.service >> /var/log/mijn-dienst-at.log 2>&1
# druk dan op Ctrl+D

Plan geen herstart of wijziging op afstand zonder het commando handmatig te hebben gecontroleerd. Als u via SSH werkt, houdt u een tweede sessie open voordat u een wijziging aanbrengt die het netwerk of de dienst kan onderbreken.

Herlees de taak en controleer de tijd van de machine

atq toont de taken in de wacht met hun identificatienummer. at -c laat het script zien dat daadwerkelijk is geregistreerd. Deze leesbeurt is nuttig wanneer een variabele, de huidige directory of een omleiding van belang is voor uw opdracht.

atq
at -c 7
timedatectl status

Vervang 7 door het nummer dat door atq wordt weergegeven. Controleer ook de tijdzone met timedatectl status. De datum die u invoert in at wordt geïnterpreteerd door de machine die de daemon uitvoert. Een server ingesteld op UTC zal de taak niet per se uitvoeren op het tijdstip dat op uw machine wordt weergegeven.

Annuleer een taak vóór uitvoering

Het verwijderen is onmiddellijk. Neem het identificatienummer opnieuw, verwijder de taak en voer vervolgens atq opnieuw uit om te bevestigen dat hij is verdwenen.

atrm 7
atq

Gebruik at voor een eenmalige actie: een purge na migratie, een eenmalige herstart of een uitgestelde test. Voor een herhaalde taak houdt u het beste cron en crontab of een systemd-timer aan. Op die manier voorkomt u dat een eenmaal geplande opdracht verandert in een vergeten automatisering.