Linux batch-Befehl
batch ist ein Kommandozeilenwerkzeug in Linux-Systemen, das verwendet wird, um Aufgaben auszuführen, wenn die Systemlast niedrig ist. Es ist Teil der at-Befehlsfamilie und speziell dafür ausgelegt, Batch-Jobs automatisch auszuführen, wenn das System im Leerlauf ist.
Anders als beim at-Befehl benötigt batch keine bestimmte Ausführungszeit; stattdessen entscheidet das System anhand der aktuellen Lastbedingungen, wann Aufgaben ausgeführt werden. Wenn die durchschnittliche Systemlast unter 0.8 liegt (konfigurierbar), führt batch die Aufgaben in der Warteschlange automatisch aus.
Wie der batch-Befehl funktioniert
batch funktioniert über die folgenden Mechanismen:
- Lasterkennung: Das System überwacht kontinuierlich die durchschnittliche Last.
- Aufgabenwarteschlange: Fügt Aufgaben in eine dedizierte Warteschlange ein (normalerweise die "batch"-Warteschlange).
- Automatische Auslösung: Führt Aufgaben in der Warteschlange aus, wenn die Systemlast unter den Schwellenwert fällt.
- Sequenzielle Ausführung: Führt Aufgaben nacheinander nach dem First-In-First-Out-Prinzip (FIFO) aus.
Grundlegende Syntax
Das grundlegende Syntaxformat des batch-Befehls ist:
batch [选项] [时间规格]
Häufige Optionen
| Option | Beschreibung |
|---|---|
-f 文件 |
Liest Befehle aus der angegebenen Datei anstelle der Standardeingabe. |
-m |
Sendet nach Abschluss der Aufgabe eine E-Mail an den Benutzer. |
-q 队列 |
Gibt eine bestimmte zu verwendende Warteschlange an (die Standardeinstellung ist die Batch-Warteschlange). |
-v |
Zeigt die Ausführungszeit der Aufgabe an. |
Format der Zeitangabe
Obwohl batch keinen strengen Zeitparameter erfordert, akzeptiert es dasselbe Zeitformat wie der at-Befehl:
HH:MM 特定时间(24小时制) midnight 午夜(00:00) noon 中午(12:00) teatime 下午茶时间(16:00) AM/PM 上午/下午标识 now + 时间 相对时间(如 now + 2 hours)
Anwendungsbeispiele
Beispiel 1: Grundlegende Verwendung
- batch-Befehl eingeben
- Geben Sie den auszuführenden Befehl ein (drücken Sie Ctrl+D, um die Eingabe zu beenden)
Beispiel
at> echo "Dies wird ausgeführt, wenn das System im Leerlauf ist" >> ~/batch_test.log
at> date >> ~/batch_test.log
at> # Drücken Sie Strg+D
Auftrag 5 am Do Mär 2 14:00:00 2023
Beispiel 2: Befehle aus einer Datei lesen
Erstellen Sie eine Aufgaben-Skriptdatei:
Beispiel
#!/bin/bash
echo "Backup wird gestartet um $(date)" >> ~/backup.log
tar -czf ~/backup-$(date +%Y%m%d).tar.gz ~/Dokumente
echo Backup abgeschlossen am $(date)" >> ~/backup.log
Aufgabe übermitteln:
Beispiel
Auftrag 6 am Do Mär 2 14:05:00 2023
Beispiel 3: Anzeigen von Aufgaben in der Warteschlange
Beispiel
5 Do Mär 2 14:00:00 2023 a userid batch
6 Do Mär 2 14:05:00 2023 a userid batch
Beispiel 4: Löschen von Aufgaben in der Warteschlange
$ atrm 5 # 删除任务ID为5的任务
Erweiterte Konfiguration
Lastschwelle ändern
Standardmäßig führt batch Aufgaben aus, wenn die durchschnittliche Systemlast unter 0.8 liegt. Sie können diesen Schwellenwert durch Ändern der Konfiguration von atd anpassen:
- Konfigurationsdatei bearbeiten (der Speicherort kann je nach Distribution variieren):
sudo nano /etc/atd.conf
- Die folgende(n) Zeile(n) ändern oder hinzufügen:
OPTS="-l 1.5" # 设置负载阈值为1.5
- Den atd-Dienst neu starten:
sudo systemctl restart atd
Durchschnittliche Systemlast anzeigen
Beispiel
14:10:30 up 2 Tage, 3:15, 3 Benutzer, Lastdurchschnitt: 0.45, 0.60, 0.72
Die drei Zahlen geben die durchschnittliche Systemlast über die letzten 1 Minute, 5 Minuten bzw. 15 Minuten an.
Vorsichtsmaßnahmen
- Berechtigungssteuerung: Standardmäßig steuern die Dateien /etc/at.allow und /etc/at.deny, welche Benutzer den batch-Befehl verwenden dürfen.
- Umgebungsvariablen: batch-Aufgaben erben nicht alle Umgebungsvariablen der aktuellen Shell; legen Sie sie bei Bedarf explizit im Skript fest.
- Ausgabebehandlung: Die Standardausgabe und Fehler von Aufgaben werden standardmäßig per E-Mail an den Benutzer gesendet; es wird empfohlen, sie in eine Datei umzuleiten.
- Lang andauernde Aufgaben: batch ist nicht für Aufgaben geeignet, die zu lange laufen; ziehen Sie die Verwendung von nohup oder tmux in Betracht.
- Systemdienst: Stellen Sie sicher, dass der atd-Dienst läuft (
systemctl status atd)
Praktische Anwendungsszenarien
- Systemwartung: Wartungsaufgaben wie Festplattenbereinigung und Protokollrotation in Zeiten geringer Auslastung durchführen.
- Ressourcenintensive Aufgaben: Aufträge, die viele Systemressourcen erfordern, wie Big-Data-Verarbeitung und das Kompilieren großer Projekte.
- Geplante Berichte: Tägliche/wöchentliche Systemnutzungsberichte erstellen.
- Automatisierte Backups: Backup-Vorgänge durchführen, wenn das System im Leerlauf ist.
- Batch-Jobs: Mehrere ähnliche Aufgaben in der Warteschlange verarbeiten.
Vergleich mit verwandten Befehlen
| Befehl | Ausführungszeit | Anwendungsszenario | Ressourcenauslastung |
|---|---|---|---|
at |
Eine bestimmte Zeit angeben | Aufgaben, die zu einer genauen Zeit ausgeführt werden | Systemlast wird nicht berücksichtigt |
batch |
Wenn das System im Leerlauf ist | Nicht dringende Hintergrundaufgaben | Nutzt Leerlaufressourcen intelligent |
cron |
Periodisch | Aufgaben, die sich periodisch wiederholen | Systemlast wird nicht berücksichtigt |
nohup |
Sofortige Ausführung | Langlaufend | Verbraucht kontinuierlich Ressourcen |
FAQ
F1: Wie sehe ich die Ausgabe von Batch-Aufgaben an?
A: Standardmäßig wird die Ausgabe per E-Mail gesendet. Du kannst sie im Befehl auch in eine Datei umleiten:
batch < output.log 2>&1 EOF
F2: Warum wurde meine Batch-Aufgabe nicht ausgeführt?
A: Mögliche Gründe:
- Die Systemlast bleibt über dem Schwellenwert
- Der atd-Dienst läuft nicht
- Die Aufgabe wurde von einem Administrator abgebrochen
- Der Benutzer hat keine Berechtigung, batch zu verwenden
F3: Können batch-Aufgaben auf die grafische Benutzeroberfläche zugreifen?
A: Nein. batch-Aufgaben werden in einer nicht interaktiven Umgebung ausgeführt und können nicht auf die GUI oder Anzeigegeräte zugreifen.
F4: Wie lege ich die Priorität von batch-Aufgaben fest?
A: Mit dem Befehl nice können Sie die Priorität anpassen:
Beispiel
nice -n 10 Befehl
EOF
Zusammenfassung
Der batch-Befehl ist ein leistungsstarkes Stapelverarbeitungswerkzeug in Linux-Systemen. Er kann:
- Ungenutzte Systemressourcen intelligent nutzen
- Aufgaben bei geringer Last automatisch ausführen
- Vereinfachen Sie die Verwaltung von Hintergrundaufgaben
- Verbessern Sie die Nutzung der Systemressourcen
Die Beherrschung des batch-Befehls kann Systemadministratoren und Entwicklern helfen, Systemressourcen effizienter zu verwalten, und er eignet sich besonders für die Ausführung nicht dringender Hintergrundverarbeitungsaufgaben.
Weitere Erweiterungen
Linux-Befehlsreferenz