Linux batch-Befehl

Linux 命令大全Linux-Befehlsreferenz


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:

  1. Lasterkennung: Das System überwacht kontinuierlich die durchschnittliche Last.
  2. Aufgabenwarteschlange: Fügt Aufgaben in eine dedizierte Warteschlange ein (normalerweise die "batch"-Warteschlange).
  3. Automatische Auslösung: Führt Aufgaben in der Warteschlange aus, wenn die Systemlast unter den Schwellenwert fällt.
  4. 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

  1. batch-Befehl eingeben
  2. Geben Sie den auszuführenden Befehl ein (drücken Sie Ctrl+D, um die Eingabe zu beenden)

Beispiel

$ batch
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

$ cat myscript.sh
#!/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

$ batch -f myscript.sh
Auftrag 6 am Do Mär  2 14:05:00 2023

Beispiel 3: Anzeigen von Aufgaben in der Warteschlange

Beispiel

$ atq
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:

  1. Konfigurationsdatei bearbeiten (der Speicherort kann je nach Distribution variieren):
sudo nano /etc/atd.conf
  1. Die folgende(n) Zeile(n) ändern oder hinzufügen:
OPTS="-l 1.5"  # 设置负载阈值为1.5
  1. Den atd-Dienst neu starten:
sudo systemctl restart atd

Durchschnittliche Systemlast anzeigen

Beispiel

$ uptime
 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

  1. Berechtigungssteuerung: Standardmäßig steuern die Dateien /etc/at.allow und /etc/at.deny, welche Benutzer den batch-Befehl verwenden dürfen.
  2. Umgebungsvariablen: batch-Aufgaben erben nicht alle Umgebungsvariablen der aktuellen Shell; legen Sie sie bei Bedarf explizit im Skript fest.
  3. 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.
  4. Lang andauernde Aufgaben: batch ist nicht für Aufgaben geeignet, die zu lange laufen; ziehen Sie die Verwendung von nohup oder tmux in Betracht.
  5. Systemdienst: Stellen Sie sicher, dass der atd-Dienst läuft (systemctl status atd)

Praktische Anwendungsszenarien

  1. Systemwartung: Wartungsaufgaben wie Festplattenbereinigung und Protokollrotation in Zeiten geringer Auslastung durchführen.
  2. Ressourcenintensive Aufgaben: Aufträge, die viele Systemressourcen erfordern, wie Big-Data-Verarbeitung und das Kompilieren großer Projekte.
  3. Geplante Berichte: Tägliche/wöchentliche Systemnutzungsberichte erstellen.
  4. Automatisierte Backups: Backup-Vorgänge durchführen, wenn das System im Leerlauf ist.
  5. 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

batch &lt;&lt;EOF
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.


Linux 命令大全Linux-Befehlsreferenz

Weitere Erweiterungen