GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden von at für Cron-Jobs zur einmaligen Verwendung in Linux

Cron ist einer der bekanntesten UNIXismen der Computerwelt. Sogar IT-Leute, die keine Linux-Server administrieren, haben von dieser mysteriösen Bestie, dem „Cron-Job“, gehört. Und Linux-Administratoren wissen, dass Cron-Jobs unendlich nützlich sind. Tatsächlich kann man argumentieren, dass cron System war ein früher Vorläufer des Automatisierungswahns. Wenn es etwas gibt, von dem Sie wussten, dass es ein Mensch vergessen könnte, cron war die Antwort.

Wo jedoch cron Excel ist Wiederholung, und manchmal muss ein Job nicht jede Stunde, jeden Tag oder jede Woche ausgeführt werden. Sie brauchen nur einen Job, der planmäßig ausgeführt wird, und das Einstellen eines Alarms, um sich selbst daran zu erinnern, scheint einfach nicht wie der UNIX-Weg zu sein. Was Sie brauchen, ist der at Befehl, ein kleines Dienstprogramm, mit dem Sie eine Warteschlange mit Jobs erstellen können, die zur Ausführung um geplant sind zu einem bestimmten Zeitpunkt in der Zukunft.

Einrichtung

Vor der Verwendung von at Befehl, müssen Sie ein Shell-Skript haben, das Sie irgendwann starten möchten. Wie üblich sollte Ihr Skript eine "Magic Cookie"- oder "Shebang"-Zeile am Anfang der Datei haben, um festzulegen, welche Shell für die Ausführung verwendet werden soll.
Erstellen Sie für dieses Beispiel ein einfaches Skript, das eine Datei darin erstellt /tmp :

#!/bin/sh

DATE=`date --utc +%s`
echo "hello world $DATE" | tee /tmp/at.log
exit 0

Machen Sie das Skript ausführbar und testen Sie es dann:

$ chmod +x test.sh
$ ./test.sh

Zeigen Sie den Inhalt von /tmp/at.log an Datei das erstellte Skript:

$ cat /tmp/at.log

hello world 1588482185

Job planen

Sie können einen Job mit einem Zeitstempel oder mit natürlicher Sprache planen. Wenn Sie natürliche Sprache oder einfache Zeitformate verwenden, ist vor der Angabe der Zeit keine Option erforderlich.
Zum Beispiel, um test.sh zu planen zur sofortigen Ausführung können Sie einfach das Schlüsselwort now verwenden :

$ at now -f test.sh

warning: commands will be executed using /bin/sh
job 1 at Mon Feb 24 01:23:00 2020
$ cat /tmp/at.log

hello world 1588482620

Sie können jetzt einen Offset festlegen mit minutes , hours , days , weeks , oder years .

$ at now + 1 day -f test.sh

warning: commands will be executed using /bin/sh
job 2 at Tue Feb 25 01:27:00 2020

Die years Schlüsselwort ist undokumentiert und seconds wird nicht unterstützt. Sie können auch allgemeine Zeiten angeben, wie z. B. midnight , noon , und teatime (das ist 16:00).

Einfache Zeiten funktionieren auch:

$ at 21:12 -f test.sh

warning: commands will be executed using /bin/sh
job 3 at Mon Feb 24 21:12:00 2020

Um ein Kalenderdatum zu einer bestimmten Zeit zu planen, müssen Sie das -t verwenden Option und jedes POSIX-kompatible Zeitformat. Verwenden Sie beispielsweise das Format YYYYMMDDHHMM:

$ at -t 202003141509 -f test.sh

warning: commands will be executed using /bin/sh
job 4 at Sat Mar 14 15:09:00 2020

[ Suchen Sie nach fortschrittlicherer Systemautomatisierung? Beginnen Sie mit The Automated Enterprise, einem kostenlosen Buch von Red Hat. ]

Rohre

Sie können Befehle an at senden über eine UNIX-Pipe:

$ echo "hello world" > /tmp/at.log | at now

warning: commands will be executed using /bin/sh
job 5 at Mon Feb 24 01:28:00 2020

$ cat /tmp/at.log

hello world

Batch-Jobs

Der batch Befehl (oder at -b ) führt einen Befehl aus, sobald die Systemressourcen dies zulassen. Wenn Ihre Systemlast hoch ist, können Sie batch verwenden um Ihren Job in die Warteschlange einzureihen, damit er ausgeführt wird, wenn CPU-Zyklen übrig sind.

$ echo "Cycles to spare" > /tmp/at.log | batch

warning: commands will be executed using /bin/sh
job 5 at Mon Feb 24 01:31:00 2020

Anzeigen Ihrer Warteschlange

Der atq Befehl zeigt Ihren at an Warteschlange. Dies gibt Ihnen die Job-ID, die Zeit, zu der jeder Job ausgeführt werden soll, die Warteschlange, in der jeder Job gruppiert ist (a für at Warteschlange oder b für den batch Warteschlange) und den Benutzernamen des Eigentümers der Warteschlange. Der Eigentümer der Warteschlange sind normalerweise Sie selbst, es sei denn, Sie führen atq aus als root, in diesem Fall sehen Sie alle Benutzer at Warteschlangen.

$ atq 

2   Tue Feb 25 01:27:00 2020  a  seth
3   Mon Feb 24 21:12:00 2020  a  seth
4   Sat Mar 14 15:09:00 2020  a  seth
5   Mon Feb 24 01:31:00 2020  b  seth

Sie können Ihre eigenen Warteschlangen mit einem beliebigen einzelnen Zeichen c-z erstellen und benennen oder A-Z . Sowohl a und b sind reservierte Bezeichnungen für at und batch , und jede Warteschlange mit einem Großbuchstaben wird als batch behandelt Arbeit. Warteschlangen mit Namen, die alphabetisch auf a folgen und b werden mit zunehmender Freundlichkeit betrieben.

Vorschau Ihres Auftrags anzeigen

Wenn Sie einen Befehl oder ein Skript an at senden , Ihr aktuelles Arbeitsverzeichnis, Umgebung (außer BASH_VERSINFO , DISPLAY , EUID , GROUPS , SHELLOPTS , TERM , UID , und _ ) und die umask bleiben erhalten. Wenn Ihr Befehl bestimmte Umgebungseinstellungen erwartet, sollten Sie diese festlegen, während Sie den Befehl an at übergeben oder überschreiben Sie sie in Ihrem Skript.

Um zu sehen, wie Ihr Befehl ausgeführt wird, verwenden Sie -c Option zusammen mit der Auftragsnummer:

$ at -c 4

#!/bin/sh
# atrun uid=1006 gid=1006
# mail seth 0

umask 22
CPLUS_INCLUDE_PATH=/usr/lib64/qt/include; export CPLUS_INCLUDE_PATH
MANPATH=/usr/local/man:/usr/man:/usr/lib64/adoptopenjdk12.0.2/man; export MANPATH
KDE_MULTIHEAD=false; export KDE_MULTIHEAD
[...]

Jobs entfernen

Sie können ausstehende Jobs von Ihrem at entfernen Warteschlange mit dem atrm Befehl und die Job-ID. Wenn Sie die Job-ID nicht kennen, verwenden Sie atq , um zuerst Ihre Warteschlange anzuzeigen.

$ atq 

6   Fri Jan 01 00:00:00 2038  a  seth
$ atrm 6

$ atq

Terminierung mit at

Der at Befehl ist ein bisschen wie ein kleinerer cron System. Es ist nützlich für die einmalige Ausführung von Befehlen und einfach zu verwenden. Wenn Sie cron verwendet haben oder sleep Um die Ausführungszeit eines Befehls auszugleichen, werfen Sie einen Blick auf at und batch .

[ Möchten Sie mehr über die Linux-Systemadministration erfahren? Erwägen Sie die Teilnahme an einem Red Hat Systemadministrationskurs. ]


Linux
  1. Cron Job:Ein umfassender Leitfaden für Anfänger 2022

  2. Systemjobs mit Cron unter Linux definieren

  3. Verwenden von Variablen in SQLCMD für Linux

  4. Linux:Cronjob im Vordergrund ausführen

  5. Protokolldateien mit Cron-Job entfernen

Cron-Jobs für Linux einrichten und die 10 besten Online-Tools für Cron-Jobs

Planen Sie Jobs in Linux mit dem Befehl 'at'

So verwenden Sie den Jobs-Befehl unter Linux

Was ist ein Cronjob unter Linux

Wie man Cron-Jobs für ein Linux-System über PHP ausführt und auflistet

Linux Crontab:15 fantastische Cron-Job-Beispiele