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:00echo '<command>' | at <time> — Plant einen Befehl nicht-interaktiv per Pipe.
echo 'backup.sh' | at 02:00at -f <script> <time> — Plant eine Skriptdatei zur Ausführung.
at -f /home/user/maintenance.sh 23:00at now + <number> <unit> — Plant relativ zur aktuellen Zeit.
echo 'reboot' | at now + 30 minutesZeitangaben
at 14:30 — Führt heute zur angegebenen Uhrzeit aus (oder morgen, falls bereits vorbei).
echo 'echo done' | at 14:30at 2:00 PM — 12-Stunden-Format mit AM/PM.
echo 'echo done' | at 2:00 PMat noon — Führt mittags (12:00 Uhr) aus.
echo 'run-report.sh' | at noonat midnight — Führt um Mitternacht (00:00 Uhr) aus.
echo 'cleanup.sh' | at midnightat 10:00 Jan 15 — Führt zu einem bestimmten Datum und einer bestimmten Uhrzeit aus.
echo 'deploy.sh' | at 10:00 Jan 15at now + 1 hour — Führt in einer Stunde aus (Einheiten: minutes, hours, days, weeks).
echo 'check-status.sh' | at now + 1 hourat tomorrow — Führt morgen zur gleichen Uhrzeit aus.
echo 'reminder.sh' | at tomorrowJobs verwalten
atq — Listet alle anstehenden at-Jobs des aktuellen Benutzers auf.
atqat -l — Listet anstehende Jobs auf (wie atq).
at -lat -c <job-id> — Zeigt den Inhalt bzw. die Befehle eines geplanten Jobs.
at -c 5atrm <job-id> — Entfernt einen geplanten Job.
atrm 5at -d <job-id> — Löscht einen geplanten Job (wie atrm).
at -d 5batch-Kommando
batch — Plant einen Job, der ausgeführt wird, sobald die Systemlast niedrig ist (< 1,5).
echo 'heavy-task.sh' | batchbatch -f <script> — Plant ein Skript zur Ausführung, sobald die Last es zulässt.
batch -f /home/user/rebuild-index.shTypische Anwendungsfälle
echo 'systemctl restart nginx' | at 03:00 — Plant einen Dienst-Neustart in den Nebenzeiten.
echo 'sudo systemctl restart nginx' | at 03:00echo '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 minutesat -M <time> — Unterdrückt die Mail-Benachrichtigung nach Abschluss des Jobs.
echo 'cleanup.sh' | at -M 02:00at -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.
Weiterführende Links
- 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)