at — Befehle zeitgesteuert einmalig ausführen

Praxis-Guide zu at: Befehle zeitgesteuert einmalig ausführen, per Pipe oder Skript einreihen, mit atq und atrm verwalten – batch nutzt ruhige Lastzeiten.

at führt einen Befehl nicht regelmäßig, sondern genau einmal zu einem späteren Zeitpunkt aus – ideal für einmalige Wartungen, einen verzögerten Neustart oder eine Erinnerung. Die Zeit gibst du erstaunlich flexibel an: als Uhrzeit, mit now + 30 minutes oder schlicht tomorrow. Voraussetzung ist der laufende atd-Daemon; geplante Jobs verwaltest du mit atq und atrm. Wer einen Job lieber dann startet, wenn das System ruhig ist, greift zu batch.

Jobs planen

at <time> — Öffnet eine interaktive Eingabe für Befehle, die zur geplanten Zeit ausgeführt werden.

at 10:00

echo '<command>' | at <time> — Plant einen Befehl nicht-interaktiv per Pipe.

echo 'backup.sh' | at 02:00

at -f <script> <time> — Plant eine Skriptdatei zur Ausführung.

at -f /home/user/maintenance.sh 23:00

at now + <number> <unit> — Plant relativ zur aktuellen Zeit.

echo 'reboot' | at now + 30 minutes

Zeitangaben

at 14:30 — Führt heute zur angegebenen Uhrzeit aus (oder morgen, falls bereits vorbei).

echo 'echo done' | at 14:30

at 2:00 PM — 12-Stunden-Format mit AM/PM.

echo 'echo done' | at 2:00 PM

at noon — Führt mittags (12:00 Uhr) aus.

echo 'run-report.sh' | at noon

at midnight — Führt um Mitternacht (00:00 Uhr) aus.

echo 'cleanup.sh' | at midnight

at 10:00 Jan 15 — Führt zu einem bestimmten Datum und einer bestimmten Uhrzeit aus.

echo 'deploy.sh' | at 10:00 Jan 15

at now + 1 hour — Führt in einer Stunde aus (Einheiten: minutes, hours, days, weeks).

echo 'check-status.sh' | at now + 1 hour

at tomorrow — Führt morgen zur gleichen Uhrzeit aus.

echo 'reminder.sh' | at tomorrow

Jobs verwalten

atq — Listet alle anstehenden at-Jobs des aktuellen Benutzers auf.

atq

at -l — Listet anstehende Jobs auf (wie atq).

at -l

at -c <job-id> — Zeigt den Inhalt bzw. die Befehle eines geplanten Jobs.

at -c 5

atrm <job-id> — Entfernt einen geplanten Job.

atrm 5

at -d <job-id> — Löscht einen geplanten Job (wie atrm).

at -d 5

batch-Kommando

batch — Plant einen Job, der ausgeführt wird, sobald die Systemlast niedrig ist (< 1,5).

echo 'heavy-task.sh' | batch

batch -f <script> — Plant ein Skript zur Ausführung, sobald die Last es zulässt.

batch -f /home/user/rebuild-index.sh

Typische Anwendungsfälle

echo 'systemctl restart nginx' | at 03:00 — Plant einen Dienst-Neustart in den Nebenzeiten.

echo 'sudo systemctl restart nginx' | at 03:00

echo 'wall "Maintenance in 10 minutes"' | at now + 50 minutes — Plant eine Broadcast-Warnmeldung an alle angemeldeten Benutzer.

echo 'wall "Server rebooting in 10 minutes"' | at now + 50 minutes

at -M <time> — Unterdrückt die Mail-Benachrichtigung nach Abschluss des Jobs.

echo 'cleanup.sh' | at -M 02:00

at -m <time> — Sendet eine Mail an den Benutzer, auch wenn der Job keine Ausgabe erzeugt.

echo 'important-task.sh' | at -m 14:00

Fazit

at ist das Werkzeug der Wahl, wenn ein Befehl genau einmal und zeitversetzt laufen soll – für alles Wiederkehrende bleibt cron zuständig. Behalte im Blick, dass Jobs nur ausgeführt werden, solange der atd-Daemon läuft, und dass /etc/at.allow und /etc/at.deny regeln, wer überhaupt Jobs einreihen darf. Ausgabe und Fehler landen standardmäßig per lokaler Mail beim Benutzer; prüfe also atq und deine Mailbox, wenn ein geplanter Job scheinbar nichts getan hat.

  • ubuntuusers-Wiki: at – deutschsprachige Einführung in das Planen einmaliger Jobs mit at und batch
  • man-Page: at(1) – offizielle Handbuchseite zu at, atq, atrm und batch (englisch)

Verwandte Kommandos

  • crontab – plant wiederkehrende Aufgaben über die Cron-Tabelle
  • systemctl – steuert systemd-Dienste und -Timer als moderne Scheduling-Alternative
  • nohup – lässt Befehle auch nach dem Abmelden weiterlaufen