So verwenden Sie at und Batch in Linux zum Programmieren von Befehlen

Inhalt

Ein Terminalfenster auf einem Linux-System.

Wenn Sie einen Linux-Job planen möchten, der nur einmal ausgeführt wird, cron es 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, du kannst verwenden batch.

So planen Sie Linux-Jobs

das cron Dämon hält eine Liste von Jobs, die Sie zu bestimmten Zeiten ausführen. Diese Aufgaben und Programme werden zur geplanten Zeit im Hintergrund ausgeführt. Dies gibt Ihnen große Flexibilität bei der Planung von Aufgaben, die wiederholt werden müssen.. Ob Sie eine Aufgabe einmal pro Stunde ausführen müssen, jeden Tag zu einer bestimmten Zeit, oder mindestens einmal im Monat oder im Jahr, du kannst es einstellen cron.

Trotz dieses, Dies hilft nicht, wenn Sie eine Aufgabe so planen möchten, dass sie nur einmal ausgeführt wird. Natürlich, du kannst es einstellen 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.

Mit Linux, wenn Sie mit einem Hindernis zu kämpfen haben, es ist fast eine Garantie, dass auch jemand anderes mit ihm gekämpft hat. Glücklicherweise, weil es schon so lange Unix-ähnliche Betriebssysteme gibt, Außerdem besteht eine große Chance, dass jemand eine Lösung für Ihr Problem gefunden hat.

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

VERBUNDEN: So planen Sie Aufgaben unter Linux: Einführung in Crontab-Dateien

Installieren des at-Befehls

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

Installieren at unter Ubuntu, benutze diesen Befehl:

sudo apt-get installieren bei

Nach Abschluss der Installation, du kannst das starten at Dämon mit diesem Befehl:

sudo systemctl enable --now atd.service

In Manjaro, du installierst at mit diesem Befehl:

sudo pacman -Sy at

Nach Abschluss der Installation, Geben Sie diesen Befehl ein, um die zu starten at Teufel:

sudo systemctl enable --now atd.service

In jeder Verteilung, Sie können diesen Befehl eingeben, um sicherzustellen, dass atd der daemon läuft:

ps -e | grep atd

So verwenden Sie den at-Befehl interaktiv

Verwenden at, Sie müssen ein Datum und eine Uhrzeit für die Ausführung zuweisen. Es gibt viel Flexibilität in der Art und Weise, wie Sie sie schreiben können, die wir später in diesem Beitrag behandeln werden.

Trotz dieses, auch wenn wir es benutzen werden at interaktiv, Sie müssen das Datum und die 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 “Unlesbare Zeit”, wie im Folgenden gezeigt:

bei
bei Banane

Datums- und Uhrzeitangaben können explizit oder relativ sein. Als Beispiel, Angenommen, Sie möchten, dass ein Befehl innerhalb einer Minute ausgeführt wird. at weiß, was es bedeutet “jetzt”, damit du es verwenden kannst now und gib ihm eine Minute, So:

jetzt + 1 Minute

at eine Nachricht drucken und a at und warten Sie, bis Sie die Befehle eingeben, die Sie programmieren möchten. Entscheiden , trotz dieses, bedenke die Nachricht, wie im Folgenden gezeigt:

Sagt Ihnen at Starten Sie eine Instanz von sh Schale und Wille führe die Befehle darin aus. Ihre Befehle werden nicht in der Bash-Shell ausgeführt, was mit dem kompatibel ist sh Shell, hat aber einen reichhaltigeren Satz an Funktionen.

Wenn Ihre Befehle oder Skripte versuchen, eine von Bash bereitgestellte Funktion oder Einrichtung zu verwenden, aber sh es nicht, wird versagen.

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

NS

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

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

Ausfahrt

Sie werden keine Fehlermeldungen oder Standardausgaben von den Befehlen sehen. Das ist weil sh Shell startet als Hintergrundaufgabe und läuft ohne Bildschirmoberfläche.

Jede Ausgabe von den Befehlen, gut oder schlecht, es wird Ihnen per E-Mail zugesandt. Es wird über das interne Mailsystem an denjenigen gesendet, der die at Befehl. Dies bedeutet, dass Sie dieses interne E-Mail-System installieren und konfigurieren müssen.

Eine Menge (die Mehrheit) der Linux-Systeme haben kein internes E-Mail-System, da wird selten gebraucht. Diejenigen, die normalerweise ein System wie . verwenden Mail senden Ö Suffix. Wenn Ihr System kein internes E-Mail-System hat, Sie können Skripte in Dateien schreiben lassen oder die Ausgabe in Dateien umleiten, um Datensätze hinzuzufügen.

Wenn der Befehl keine Fehlermeldung oder Standardausgabe erzeugt, du bekommst sowieso keine email. Viele Linux-Befehle zeigen Erfolg durch Stille an, also in den meisten Fällen, Sie erhalten keine E-Mail.

VERBUNDEN: Was sind stdin, stdout und stderr auf Linux?

Jetzt ist es an der Zeit, einen Befehl einzugeben at. Für dieses Beispiel, Wir verwenden eine kleine Skriptdatei namens sweep.sh das löscht die *.bak, *.tmp, und *.o Aufzeichnungen. Geben Sie den Pfad zum Befehl ein, wie im Folgenden gezeigt, und drücken Sie dann die Eingabetaste.

Eine weitere Eingabeaufforderung erscheint und Sie können so viele Befehle hinzufügen, wie Sie möchten. Im Allgemeinen, Es ist bequemer, Ihre Befehle in einem einzigen Skript zu haben und dieses Skript einfach von innen aufzurufen at.

Presione Strg + D zu sagen at Sie haben das Hinzufügen von Befehlen abgeschlossen. at zeigt an , Bedeutung Ende der Übertragung. Sie erhalten die Auftragsnummer und die geplante Ausführung, wie im Folgenden gezeigt:

Nachdem der Job ausgeführt wurde, Schreiben Sie Folgendes, um Ihre interne E-Mail zu überprüfen:

E-Mail

Wenn keine Post da ist, muss den Erfolg übernehmen. Auf jeden Fall, unter diesen Umständen, Sie können überprüfen und sehen, ob die *.bak , *.tmp, und *.o Die Dateien wurden entfernt, um zu bestätigen, dass der Befehl funktioniert hat.

Geben Sie Folgendes ein, um alles noch einmal zu starten:

jetzt + 1 Minute

Nach einer Minute, Schreiben Sie Folgendes, um Ihre E-Mails zu überprüfen:

E-Mail

¡Oye, Wir haben Post! Um Nachricht Nummer eins 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 generierten. In diesem Beispiel, Es gab keine Dateien zu entfernen, weil wir das Skript zuvor ausgeführt haben, beseitigte sie.

D drücken + Geben Sie ein, um die E-Mail zu entfernen und Q + Enter um das Mailprogramm zu beenden.

Datums- und Zeitformate

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

  • Lauf um 11:00 bin:
  • Lauf morgen um 11:00 bin:
  • Lauf um 11:00 ein. m. Ab diesem Tag nächste Woche:
  • Laufen Sie zu dieser Zeit, an diesem Tag, nächste Woche:
  • Lauf um 11:00 bin nächsten Freitag:
  • Laufen Sie nächsten Freitag um diese Zeit:
  • Lauf um 11:00 bin an diesem datum, nächsten Monat:
  • Lauf um 11:00 bin an einem bestimmten datum:
  • Lauf innerhalb 30 Protokoll:
  • Innerhalb von zwei Stunden laufen:
  • Lauf morgen um diese Zeit:
  • Lauf zu dieser Zeit am Donnerstag:
  • Lauf um 12:00 bin:
  • Lauf um 12:00 pm:
  • Wenn du Brite bist, Sie können sogar einen Befehl so planen, dass er zur Teezeit ausgeführt wird (4 P. M.):

Blick in die Job-Warteschlange

Du kannst das schreiben atq Befehl zum Anzeigen der Warteschlange der geplanten Jobs, wie im Folgenden gezeigt.

Für jeden Befehl in der Warteschlange, atq zeige die nächsten Informationen:

  • Job-Identifikation
  • Geplanter Termin
  • Geplante Zeit
  • Warteschlange, wo der Job ist. Warteschlangen werden als “ein”, “B”, etc. Normale Aufgaben, mit denen Sie planen at In die Warteschlange einsteigen “ein”, während die Aufgaben, mit denen Sie planen, batch (die später in diesem Beitrag besprochen werden) In die Warteschlange einsteigen “B”.
  • Die Person, die den Job geplant hat.

Verwenden von at in der Befehlszeile

Sie sollten nicht verwenden at interaktiv; Sie können es auch im Befehl verwenden. Dies macht es einfach, interne Skripte zu verwenden.

Sie können Befehle an weiterleiten at, so was:

Echo "sh ~/sweep.sh" | bei 08:45 BIN

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

VERBUNDEN: Wie man Pipes unter Linux verwendet

Verwenden Sie bei mit Skripten

Sie können ein Skript auch in einer Datei speichern und dann an . weitergeben at. Es kann eine Nur-Text-Skriptdatei sein, es muss kein ausführbares Skript sein.

Du kannst den ... benutzen -f (Datei) wie folgt, um einen Dateinamen an . zu übergeben at:

jetzt + 5 Minuten -f clean.txt

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

jetzt + 5 Protokoll < clean.txt

Geplante Jobs aus der Warteschlange entfernen

So entfernen Sie einen geplanten Job aus der Warteschlange, du kannst den ... benutzen atrm Befehl. Wenn Sie zuerst die Warteschlange sehen möchten, um die Nummer des Jobs zu finden, den Sie entfernen möchten, du kannst verwenden atq . Anschließend, Verwenden Sie diese Arbeitsnummer mit atrm, Wie nachfolgend dargestellt:

und
atrm 11
und

So zeigen Sie eine Detailansicht der Jobs an

Wie bereits erwähnt, kann Jobs in der Zukunft planen. Manchmal, Sie können vergessen, was ein Job tun wird. das atq Der Befehl zeigt die Jobs in der Warteschlange an, aber nicht was sie tun werden. Wenn Sie eine Detailansicht eines Jobs sehen möchten, du kannst den ... benutzen -c (Katze) Möglichkeit.

Entscheiden , wir werden verwenden atq um die Jobnummer zu finden:

und

Jetzt, Wir werden die Jobnummer verwenden 13 mit dem -c Möglichkeit:

bei -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 Hülse.
  • Zweite Reihe: Wir sehen, dass die Befehle mit einer Benutzer- und Gruppen-ID von ausgeführt werden 1000. Dies sind die Werte für die Person, die das at Befehl.
  • Dritte Zeile: Die Person, die die E-Mails erhält. atsenden.
  • Vierte Zeile: das Benutzermaske es ist 22. Dies ist die Maske, die verwendet wird, um die Standardberechtigungen für jede in diesem erstellte Datei zu bestimmen sh Sitzung. Die Maske wird abgezogen von 666, was gibt uns 644 (das identische Oktal von rw-r--r--).
  • Verbleibende Daten: Die meisten sind Umgebungsvariablen.

  • Ergebnisse eines Tests. Ein Test prüft, ob das Laufverzeichnis eingegeben werden kann. Wenn er nicht kann, ein Fehler wird generiert und die Jobausführung wird 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 für die Ausführung in Bash . geschrieben wurde, läuft noch auf a sh Hülse.

Der Batch-Befehl

das batch Befehl funktioniert ähnlich al at Befehl, aber mit drei signifikanten 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ügt sie der Warteschlange hinzu und die batch Der Befehl führt sie aus, wenn die durchschnittliche Systemlast kleiner ist als 1,5.
  3. Aufgrund der oben genannten, Geben Sie niemals ein Datum und eine Uhrzeit mit dem . an batch Befehl.

Wenn Sie das verwenden batch Befehl, ruft es beim Namen ohne Befehlszeilenparameter wie diese auf:

Charge

Nächste, fügen Sie Aufgaben hinzu, so wie Sie es mit der at Befehl.

Kontrollieren Sie den Zugriff auf das at-Kommando

das at.allow und at.deny die Dateien steuern, wer die at Befehlsfamilie. Diese finden Sie in der /etc Verzeichnis. Standard, nur der at.deny Datei existiert und wird erstellt, wenn at es ist installiert.

So funktionieren diese:

  • at.deny: Listen Sie die Anwendungen und Entitäten auf, die nicht verwendet werden können at um Jobs zu planen.
  • at.allow: Listen, die sie verwenden können at um Jobs zu planen. Wenn er at.allow Die Datei existiert nicht, at benutze einfach die at.deny Verfahren.

Standardmäßig, jeder kann benutzen at. Wenn Sie einschränken möchten, wer es verwenden kann, benutze el at.allow Datei, um diejenigen aufzulisten, die das können. Das ist einfacher, als alle hinzuzufügen, die nicht verwenden können at al at.deny Verfahren.

Das ist was at.deny die datei sieht so aus:

sudo weniger /etc/at.deny

Die Datei listet die Betriebssystemkomponenten auf, die sie nicht verwenden können at. Viele von ihnen können dies aus Sicherheitsgründen nicht, Sie möchten also keine der Dateien entfernen.

Jetzt, wir werden die bearbeiten at.allow Verfahren. Lass uns hinzufügen dave und mary, aber niemand sonst kann es benutzen at.

Entscheiden , wir schreiben folgendes:

sudo gedit /etc/at.allow

Im Editor, wir fügen die beiden namen hinzu, wie im Folgenden gezeigt, und dann speichern wir die Datei.

Wenn jemand anderes versucht zu verwenden at, Sie werden dir sagen, dass du keine Erlaubnis hast. Als Beispiel, Sagen wir, ein Benutzer namens eric schreib das Folgende:

bei

Würde abgelehnt, wie im Folgenden gezeigt.

Wieder, eric Ist nicht im at.deny Verfahren. Sobald Sie jemanden in die at.allow Datei, allen anderen wird die Nutzung verweigert at.

Super für außergewöhnliche Anlässe

Wie du siehst, beide at und batch Sie sind ideal für Aufgaben, die Sie nur einmal ausführen müssen. Wieder, als kurzer Rückblick:

  • Wenn Sie etwas anderes als ein normales Verfahren tun müssen, Programm mit at.
  • Wenn Sie eine Aufgabe nur ausführen möchten, wenn die Systemlast niedrig genug ist, verwenden batch.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.