Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Ausführen von Cron-Jobs auf Linux-Instances
Wichtig
Der AWS OpsWorks Stacks Dienst hat am 26. Mai 2024 das Ende seiner Lebensdauer erreicht und wurde sowohl für neue als auch für bestehende Kunden deaktiviert. Wir empfehlen Kunden dringend, ihre Workloads so bald wie möglich auf andere Lösungen zu migrieren. Wenn Sie Fragen zur Migration haben, wenden Sie sich an das AWS Support Team auf AWS re:POST
Ein Cron-Job unter Linux weist den Cron-Daemon an, Befehle zu festgelegten Zeiten auszuführen. Angenommen, Ihr Stack unterstützt eine PHP-E-Commerce-Anwendung. Sie können einen Cron-Job einrichten, um den Server anzuweisen, wöchentlich zu einem festgelegten Zeitpunkt einen Verkaufsbericht zu senden. Weitere Informationen zu Cron finden Sie unter Cron
Sie können cron
-Jobs zwar auf einzelnen Linux-basierten Instances manuell einrichten, indem Sie sich über SSH auf den Instances anmelden und ihre crontab
-Einträge, bearbeiten, ein großer Vorteil von AWS OpsWorks Stacks besteht jedoch darin, dass Sie damit den Auftrag für einen ganze Instances-Layer ausführen können. Das folgende Verfahren beschreibt, wie Sie einen cron
Job auf den Instanzen einer PHP App Server-Layer einrichten, aber Sie können den gleichen Ansatz für jede Ebene verwenden.
So richten Sie einen cron
-Job auf den Instances eines Layers ein
-
Implementieren Sie ein Kochrezept mit einem Rezept, das eine
cron
-Ressource enthält, um den Auftrag einzurichten. In diesem Beispiel heißt das Rezeptcronjob.rb
. Weitere Informationen zur Implementierung werden im weiteren Verlauf dieser Anleitung beschrieben. Weitere Informationen zu Rezeptbüchern und Rezepten finden Sie unter Cookbooks und Rezepte. -
Installieren Sie das Rezeptbuch auf Ihrem Stack. Weitere Informationen finden Sie unter Installieren von benutzerdefinierten Rezeptbüchern.
-
Lassen Sie AWS OpsWorks Stacks das Rezept automatisch auf den Instanzen der Ebene ausführen, indem Sie es den folgenden Lebenszyklusereignissen zuweisen. Weitere Informationen finden Sie unter Automatisches Ausführen von Rezepten.
-
Setup — Durch die Zuweisung
cronjob.rb
zu diesem Ereignis wird AWS OpsWorks Stacks angewiesen, das Rezept auf allen neuen Instanzen auszuführen. -
Bereitstellen — Durch die Zuweisung
cronjob.rb
zu diesem Ereignis wird AWS OpsWorks Stacks angewiesen, das Rezept auf allen Online-Instanzen auszuführen, wenn Sie eine App auf dem Layer bereitstellen oder erneut bereitstellen.
Sie können das Rezept auch manuell auf Online-Instances ausführen. Verwenden Sie dazu den Stack-Befehl
Execute Recipes
. Weitere Informationen finden Sie unter Ausführen von Stack-Befehlen. -
Nachfolgend finden Sie das Beispiel cronjob.rb
, mit dem ein Cron-Job eingerichtet wird, um einmal wöchentlich eine vom Benutzer implementierte PHP-Anwendung auszuführen, die Verkaufsdaten vom Server abruft und einen Bericht per E-Mail sendet. Weitere Informationen zur Verwendung von Cron-Ressourcen finden Sie unter cron
cron "
job_name
" do hour "1" minute "10" weekday "6" command "cd /srv/www/myapp/current && php .lib/mailing.php" end
cron
ist eine Chef-Ressource, die einen cron
-Auftrag repräsentiert. Wenn AWS OpsWorks Stacks das Rezept auf einer Instanz ausführt, kümmert sich der zugehörige Anbieter um die Details der Einrichtung des Jobs.
-
ist ein benutzerdefinierter Name für denjob_name
cron
-Auftrag, beispielsweiseweekly report
. -
Über
hour
/minute
/weekday
legen Sie den Zeitpunkt fest, zu dem die Befehle ausgeführt werden. In diesem Beispiel werden die Befehle samstags um 1.10 Uhr ausgeführt. -
command
legt die auszuführenden Befehle fest.In diesem Beispiel werden zwei Befehle ausgeführt. Der erste Befehl führt zum Verzeichnis
/srv/www/myapp/current
. Der zweite Befehl führt die vom Benutzer implementierte Anwendungmailing.php
aus, über die Verkaufsdaten erfasst und als Bericht gesendet werden.
Anmerkung
Der Befehl bundle
ist standardmäßig nicht mit cron
-Aufträgen kompatibel. Der Grund dafür ist, dass AWS OpsWorks Stacks den Bundler im Verzeichnis installiert. /usr/local/bin
Um den Befehl bundle
in einem cron
-Auftrag zu verwenden, müssen Sie den Pfad /usr/local/bin
dem Cron-Auftrag hinzufügen. Da auch die Umgebungsvariable $PATH sich möglicherweise nicht auf den cron
-Auftrag auswirkt, sollten Sie alle erforderlichen Pfadinformationen explizit zu dem Auftrag hinzufügen und sich nicht darauf verlassen, dass die $PATH-Variable sich automatisch auf den Cron-Auftrag auswirkt. In den folgenden Beispielen lernen Sie zwei Möglichkeiten zur Verwendung von bundle
in einem cron
-Auftrag kennen.
cron "my first task" do path "/usr/local/bin" minute "*/10" command "cd /srv/www/myapp/current && bundle exec my_command" end
cron_env = {"PATH" => "/usr/local/bin"} cron "my second task" do environment cron_env minute "*/10" command "cd /srv/www/myapp/current && /usr/local/bin/bundle exec my_command" end
Wenn Ihr Stack über mehrere Anwendungsserver verfügt, ist die cronjob.rb
Zuweisung von Ereignissen im Lebenszyklus der PHP App Server-Ebene möglicherweise kein idealer Ansatz. Wenn das Rezept auf allen Instances des Layers ausgeführt wird, erhalten Sie beispielsweise mehrere Berichte. Verwenden Sie besser einen benutzerdefinierten Layer, um sicherzustellen, dass nur von einem Server ein Bericht gesendet wird.
So führen Sie ein Rezept auf nur einer Instance eines Layers aus
-
Erstellen Sie einen benutzerdefinierten Layer und nennen Sie ihn beispielsweise PHPAdmin. Weisen Sie
cronjob.rb
den Lebenszyklusereignissen Einrichtung und Bereitstellung zu. Benutzerdefinierte Layer müssen nicht immer viel tun. In diesem Fall führt PHPAdmin nur ein benutzerdefiniertes Rezept auf seinen Instances aus. -
Weisen Sie eine der PHP App Server-Instanzen zu AdminLayer. Wenn eine Instanz zu mehr als einer Ebene gehört, führt AWS OpsWorks Stacks die integrierten und benutzerdefinierten Rezepte jeder Ebene aus.
Da nur eine Instanz zu den Ebenen PHP App Server und phpAdmin gehört, cronjob.rb
wird sie nur auf dieser Instanz ausgeführt und Sie erhalten nur einen Bericht.