Connect with us

Wie man

So verwenden Sie at und Batch unter Linux zum Planen von Befehlen

So verwenden Sie Curl zum Herunterladen von Dateien über die Linux-Befehlszeile

Fatmawati Achmad Zaenuri/Shutterstock

Wenn Sie einen Linux-Job planen möchten, der nur einmal ausgeführt wird, cron ist übertrieben. Das at Befehlsfamilie ist das, was Sie brauchen! Und wenn Sie Prozesse nur ausführen möchten, wenn Ihr System über freie Ressourcen verfügt, können Sie batch.

So planen Sie Linux-Jobs

Das cron Dämon unterhält eine Liste der Jobs, die zu bestimmten Zeiten ausgeführt werden. Diese Aufgaben und Programme laufen zu den geplanten Zeiten im Hintergrund. Dies bietet Ihnen große Flexibilität bei der Planung von Aufgaben, die wiederholt werden müssen. Unabhängig davon, ob Sie eine Aufgabe stündlich, täglich zu einer bestimmten Uhrzeit oder einmal im Monat oder Jahr ausführen müssen, können Sie sie in it einrichten cron.

Dies hilft jedoch nicht, wenn Sie eine Aufgabe so planen möchten, dass sie nur einmal ausgeführt wird. Klar, du kannst es einrichten in cron, aber dann müssen Sie daran denken, zurückzugehen und die zu entfernen crontab-Eintrag nachdem die Aufgabe ausgeführt wurde, was unpraktisch ist.

Wenn Sie unter Linux mit einem Problem zu kämpfen haben, ist dies fast eine Garantie, dass auch jemand anderes damit zu kämpfen hat. Glücklicherweise, da es Unix-ähnliche Betriebssysteme schon so lange gibt, besteht auch eine ausgezeichnete Chance, dass jemand eine Lösung für Ihr Problem entwickelt hat.

Für das oben beschriebene Problem haben sie, und es heißt at.

Installieren des at-Befehls

Wir mussten installieren at auf Ubuntu 18.04 und Manjaro 18.1.0 (es war bereits auf Fedora 31 installiert).

Installieren at Verwenden Sie unter Ubuntu diesen Befehl:

sudo apt-get install at

Nachdem die Installation abgeschlossen ist, können Sie die at Dämon mit diesem Befehl:

sudo systemctl enable --now atd.service

Auf Manjaro installieren Sie at mit diesem Befehl:

sudo pacman -Sy at

Geben Sie nach Abschluss der Installation diesen Befehl ein, um den at Dämon:

sudo systemctl enable --now atd.service

Bei jeder Distribution können Sie diesen Befehl eingeben, um sicherzustellen, dass die atd Daemon läuft:

ps -e | grep atd

So verwenden Sie den at-Befehl interaktiv

Benutzen at, müssen Sie ihm ein Datum und eine Uhrzeit für die Ausführung zuweisen. Sie können diese sehr flexibel schreiben, auf die wir später in diesem Artikel eingehen.

Aber auch wenn wir verwenden werden at interaktiv müssen Sie Datum und Uhrzeit im Voraus angeben. Wenn Sie nichts in die Befehlszeile einfügen oder etwas eingeben, das kein Datum und keine Uhrzeit ist, at antwortet mit „Nicht verstandene Zeit“, wie unten gezeigt:

at
at banana

Datums- und Uhrzeitangaben können explizit oder relativ sein. Angenommen, Sie möchten, dass ein Befehl in einer Minute ausgeführt wird. at weiß, was „jetzt“ bedeutet, also können Sie es verwenden now und füge eine Minute hinzu, etwa so:

at now + 1 minute

at druckt eine Nachricht und ein at Eingabeaufforderung und wartet darauf, dass Sie die Befehle eingeben, die Sie planen möchten. Betrachten Sie jedoch zunächst die folgende Nachricht:

Es sagt dir at startet eine Instanz des sh Schale und Wille führe die Befehle darin aus. Ihre Befehle werden nicht in der Bash-Shell ausgeführt, die mit dem kompatibel ist sh Shell, hat aber einen umfangreicheren Funktionsumfang.

Wenn Ihre Befehle oder Skripte versuchen, eine von Bash bereitgestellte Funktion oder Einrichtung zu verwenden, aber sh nicht, sie werden scheitern.

Es ist einfach zu testen, ob Ihre Befehle oder Skripte in . ausgeführt werden sh. Verwenden Sie die sh Befehl zum Starten eines sh Schale:

sh

Die Eingabeaufforderung ändert sich in ein Dollarzeichen ($) und Sie können jetzt Ihre Befehle ausführen und überprüfen, ob sie richtig funktionieren.

Um zur Bash-Shell zurückzukehren, geben Sie die exit Befehl:

exit

Sie werden keine Standardausgaben oder Fehlermeldungen von den Befehlen sehen. Dies liegt daran, dass sh Shell startet als Hintergrundaufgabe und läuft ohne jegliche Bildschirmoberfläche.

Jede Ausgabe der Befehle – ob gut oder schlecht – wird Ihnen per E-Mail zugesendet. Es wird über das interne Mail-System an denjenigen gesendet, der die at Befehl. Dies bedeutet, dass Sie dieses interne E-Mail-System einrichten und konfigurieren müssen.

Viele (die meisten) Linux-Systeme haben kein internes E-Mail-System, da es selten benötigt wird. Diejenigen, die dies tun, verwenden normalerweise ein System wie sendmail oder Postfix. Wenn Ihr System kein internes E-Mail-System hat, können Sie Skripte in Dateien schreiben oder die Ausgabe in Dateien umleiten lassen, um die Protokollierung hinzuzufügen.

Wenn der Befehl keine Standardausgabe oder Fehlermeldungen generiert, erhalten Sie sowieso keine E-Mail. Viele Linux-Befehle zeigen den Erfolg durch Stille an, sodass Sie in den meisten Fällen keine E-Mail erhalten.

Jetzt ist es an der Zeit, einen Befehl einzugeben at. In diesem Beispiel verwenden wir eine kleine Skriptdatei namens sweep.sh das löscht die *.bak, *.tmp, und *.o Dateien. Geben Sie den Pfad zum Befehl wie unten gezeigt ein, und drücken Sie dann die Eingabetaste.

Eine weitere Eingabeaufforderung wird angezeigt, und Sie können beliebig viele Befehle hinzufügen. Es ist normalerweise bequemer, Ihre Befehle in einem einzigen Skript zu haben und dieses Skript einfach von innen aufzurufen at.

Drücken Sie Strg+D, um zu sagen at Sie sind mit dem Hinzufügen von Befehlen fertig. at zeigt , was bedeutet Ende der Übertragung. Die Jobnummer und die geplante Ausführung des Jobs werden Ihnen wie unten gezeigt mitgeteilt:

Geben Sie nach Ausführung des Jobs Folgendes ein, um Ihre internen E-Mails zu überprüfen:

mail

Kommt keine Mail, müssen Sie von Erfolg ausgehen. In diesem Fall können Sie natürlich prüfen, ob die *.bak , *.tmp, und *.o Dateien wurden gelöscht, um zu bestätigen, dass der Befehl funktioniert hat.

Geben Sie Folgendes ein, um das Ganze erneut auszuführen:

at now + 1 minute

Geben Sie nach einer Minute Folgendes ein, um Ihre E-Mails erneut zu überprüfen:

mail

Hey, wir haben Post! Um die erste Nachricht zu lesen, drücken Sie 1 und drücken Sie dann die Eingabetaste.

Wir haben eine E-Mail erhalten von at weil die Befehle im Skript Fehlermeldungen generiert haben. In diesem Beispiel gab es keine zu löschenden Dateien, da sie bei der vorherigen Ausführung des Skripts entfernt wurden.

Drücken Sie D+Enter, um die E-Mail zu löschen und Q+Enter, um das E-Mail-Programm zu beenden.

Datums- und Zeitformate

Bei den Zeitformaten, die Sie verwenden können, sind Sie sehr flexibel at. Hier ein paar Beispiele:

  • Lauf um 11:00 Uhr:
  • Lauf morgen um 11:00 Uhr:
  • Lauf um 11:00 Uhr an diesem Tag nächste Woche:
  • Ausführen zu dieser Zeit, an diesem Tag, nächste Woche:
  • Lauf um 11:00 Uhr nächsten Freitag:
  • Läuft nächsten Freitag um diese Zeit:
  • Lauf um 11:00 Uhr an diesem Datum, nächsten Monat:
  • Lauf um 11:00 Uhr an einem bestimmten Datum:
  • Ab jetzt 30 Minuten laufen:
  • Ab jetzt in zwei Stunden laufen:
  • Lauf morgen um diese Zeit:
  • Lauf zu dieser Zeit am Donnerstag:
  • Lauf um 12:00 Uhr:
  • Lauf um 12:00 Uhr:
  • Wenn Sie ein Brite sind, können Sie sogar einen Befehl planen, der zur Teezeit (16 Uhr) ausgeführt wird:

Blick in die Job-Warteschlange

Sie können die eingeben atq Befehl, um die Warteschlange der geplanten Jobs anzuzeigen, wie unten gezeigt.

Für jeden Befehl in der Warteschlange atq zeigt die folgenden Informationen an:

  • Job-ID
  • Geplantes Datum
  • Geplante Zeit
  • Stellen Sie den Job in die Warteschlange ein. Die Warteschlangen sind mit „a“, „b“ usw. gekennzeichnet. Normale Aufgaben, mit denen Sie planen at Gehen Sie in die Warteschlange „a“, während Aufgaben, die Sie mit planen batch (wird später in diesem Artikel behandelt) gehen Sie in die Warteschlange „b“.
  • Die Person, die den Job geplant hat.

Verwenden von at in der Befehlszeile

Sie müssen nicht verwenden at interaktiv; Sie können es auch für den Befehl verwenden. Dies erleichtert die Verwendung innerhalb von Skripten.

Sie können Befehle in at, so was:

echo "sh ~/sweep.sh" | at 08:45 AM

Der Auftrag wird angenommen und eingeplant von at, und die Auftragsnummer und das Ausführungsdatum werden wie zuvor gemeldet.

Verwenden von at mit Befehlsdateien

Sie können auch eine Befehlsfolge in einer Datei speichern und diese dann an . übergeben at. Dies kann eine reine Textdatei mit Befehlen sein – es muss kein ausführbares Skript sein.

Du kannst den … benutzen -f (Datei) Option auf die folgende Weise, um einen Dateinamen an zu übergeben at:

at now + 5 minutes -f clean.txt

Sie können das gleiche Ergebnis erzielen, wenn Sie die Datei in umleiten at:

at now + 5 minutes < clean.txt

Geplante Jobs aus der Warteschlange entfernen

Um einen geplanten Job aus der Warteschlange zu entfernen, können Sie die atrm Befehl. Wenn Sie zuerst die Warteschlange sehen möchten, um die Nummer des Jobs zu finden, den Sie entfernen möchten, können Sie verwenden atq . Verwenden Sie dann diese Jobnummer mit atrm, Wie nachfolgend dargestellt:

atq
atrm 11
atq

So sehen Sie eine detaillierte Ansicht der Jobs

Wie bereits erwähnt, können Sie Jobs weit in die Zukunft planen. Manchmal vergisst du vielleicht, was ein Job tun wird. Das atq Befehl zeigt Ihnen die Jobs in der Warteschlange, aber nicht, was sie tun werden. Wenn Sie eine Detailansicht eines Jobs sehen möchten, können Sie das -c (Katze) Option.

Zuerst verwenden wir atq um die Jobnummer zu finden:

atq

Jetzt verwenden wir die Jobnummer 13 mit dem -c Möglichkeit:

at -c 13

Hier ist eine Aufschlüsselung der Informationen, die wir über den Job erhalten:

  • Erste Linie: Dies sagt uns, dass die Befehle unter dem ausgeführt werden sh Schale.
  • Zweite Reihe: Wir sehen, dass die Befehle sowohl mit einer Benutzer- als auch mit einer Gruppen-ID von 1000 ausgeführt werden. Dies sind die Werte für die Person, die das ausgeführt hat at Befehl.
  • Dritte Zeile: Die Person, die E-Mails erhält atsendet.
  • Vierte Zeile: Das Benutzermaske ist 22. Dies ist die Maske, die verwendet wird, um die Standardberechtigungen für alle in diesem erstellten Dateien festzulegen sh Session. Die Maske wird von 666 abgezogen, was uns 644 (das oktale Äquivalent von rw-r--r--).
  • Restliche Daten: Die Mehrheit sind Umgebungsvariablen.

  • Ergebnisse eines Tests. Ein Test prüft, ob auf das Ausführungsverzeichnis zugegriffen werden kann. Wenn dies nicht möglich ist, wird ein Fehler ausgegeben und die Jobausführung abgebrochen.
  • Die auszuführenden Befehle. Diese werden aufgelistet, und der Inhalt der geplanten Skripte wird angezeigt. Beachten Sie, dass das Skript in unserem obigen Beispiel zwar für die Ausführung unter Bash geschrieben wurde, es jedoch weiterhin in einem sh Schale.

Der Batch-Befehl

Das batch Befehl funktioniert ähnlich zum at Befehl, jedoch mit drei wesentlichen Unterschieden:

  1. Sie können nur die batch Befehl interaktiv.
  2. Anstatt Jobs so zu planen, dass sie zu einem bestimmten Zeitpunkt ausgeführt werden, fügen Sie sie der Warteschlange hinzu, und die batch Befehl führt sie aus, wenn die durchschnittliche Last des Systems niedriger als 1,5 ist.
  3. Aus den oben genannten Gründen geben Sie niemals ein Datum und eine Uhrzeit mit dem . an batch Befehl.

Wenn Sie das verwenden batch Befehl, rufen Sie ihn mit dem Namen ohne Befehlszeilenparameter wie folgt auf:

batch

Fügen Sie als Nächstes Aufgaben hinzu, so wie Sie es mit dem at Befehl.

Kontrollieren des Zugriffs auf das at-Kommando

Das at.allow und at.deny Dateien steuern, wer die at Familie von Befehlen. Diese befinden sich innerhalb der /etc Verzeichnis. Standardmäßig sind nur die at.deny Datei existiert und wird erstellt, wenn at ist installiert.

So funktionieren diese:

  • at.deny: Listet Anwendungen und Entitäten auf, die nicht verwendet werden können at Aufträge zu planen.
  • at.allow: Listen, die verwenden können at Aufträge zu planen. Wenn die at.allow Datei existiert nicht, at verwendet nur die at.deny Datei.

Standardmäßig kann jeder verwenden at. Wenn Sie einschränken möchten, wer sie verwenden kann, verwenden Sie die at.allow Datei, um diejenigen aufzulisten, die es können. Dies ist einfacher, als alle hinzuzufügen, die nicht verwenden können at zum at.deny Datei.

Hier ist, was die at.deny Datei sieht so aus:

sudo less /etc/at.deny

Die Datei listet Komponenten des Betriebssystems auf, die nicht verwendet werden können at. Viele von ihnen werden aus Sicherheitsgründen daran gehindert, sodass Sie keine aus der Datei entfernen möchten.

Jetzt bearbeiten wir die at.allow Datei. Wir werden hinzufügen dave und mary, aber niemand sonst darf sie benutzen at.

Zuerst geben wir Folgendes ein:

sudo gedit /etc/at.allow

Im Editor fügen wir die beiden Namen wie unten gezeigt hinzu und speichern dann die Datei.

"dave" und "Maria" zu gedit hinzugefügt.

Wenn jemand anderes versucht zu verwenden at, wird ihm mitgeteilt, dass er keine Erlaubnis hat. Angenommen, ein Benutzer namens eric gibt folgendes ein:

at

Er würde abgelehnt werden, wie unten gezeigt.

Nochmal, eric ist nicht in der at.deny Datei. Sobald Sie jemanden in die at.allow Datei, jeder und jedem anderen wird die Berechtigung zur Nutzung verweigert at.

Ideal für Einzelstücke

Wie ihr seht, beides at und batch sind ideal für Aufgaben, die Sie nur einmal ausführen müssen. Nochmals als kurzer Rückblick:

  • Wenn Sie etwas tun müssen, das nicht regelmäßig ist, planen Sie es mit at.
  • Wenn Sie eine Aufgabe nur ausführen möchten, wenn die Systemlast niedrig genug ist, verwenden Sie batch.

Continue Reading
Click to comment

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Tendencia