Ausführen von Cron-Jobs auf Linux-Instances - AWS OpsWorks

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 oder über den AWS Premium-Support.

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 auf Wikipedia. Weitere Informationen dazu, wie Sie einen Cron-Auftrag direkt auf einem Linux-basierten Computer oder einer Linux-basierten Instance ausführen, finden Sie unter Was ist Cron und Crontab und wie sind Sie zu verwenden? auf der Wissensdatenbank-Website der Indiana University.

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
  1. Implementieren Sie ein Kochrezept mit einem Rezept, das eine cron-Ressource enthält, um den Auftrag einzurichten. In diesem Beispiel heißt das Rezept cronjob.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.

  2. Installieren Sie das Rezeptbuch auf Ihrem Stack. Weitere Informationen finden Sie unter Installieren von benutzerdefinierten Rezeptbüchern.

  3. 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.

  • job_name ist ein benutzerdefinierter Name für den cron-Auftrag, beispielsweise weekly 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 Anwendung mailing.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
  1. 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.

  2. 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.