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.
Beispiel 7: Ausführen von Befehlen und Skripts
Wichtig
Das Tool AWS OpsWorks Stacks Der Dienst hat am 26. Mai 2024 das Ende seiner Nutzungsdauer 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 AWS Support Team ein AWS Re:post oder
Chef-Ressourcen können zahlreiche Aufgaben auf Instances ausführen, aber gelegentlich ist es sinnvoller, einen Shell-Befehl oder ein Skript zu verwenden. Das ist beispielsweise der Fall, wenn Sie bereits Skripts für bestimmte Aufgaben einsetzen. Dann ist es einfacher, diese weiterzuverwenden, anstatt neuen Code zu implementieren. In diesem Abschnitt erfahren Sie, wie Befehle oder Skripts auf einer Instance ausgeführt werden.
Ausführen von Befehlen
Die script
Dies sind Ihre ersten Schritte
-
Erstellen Sie ein Verzeichnis in
opsworks_cookbooks
namensscript
und öffnen Sie es. -
Fügen Sie eine Datei
metadata.rb
zuscript
mit dem folgenden Inhalt hinzu:name "script" version "0.1.0"
-
Initialisieren und konfigurieren Sie Test Kitchen wie unter Beispiel 1: Installieren von Paketen beschrieben und entfernen Sie CentOS aus der Liste
platforms
. -
Erstellen Sie in
script
ein Verzeichnis namensrecipes
.
Sie können Befehle direkt mit der script
-Ressource ausführen, aber Chef unterstützt auch eine Reihe von Ressourcenversionen, die auf bestimmte Befehlsinterpreter ausgerichtet und nach diesen benannt sind. Im folgenden Rezept wird ein einfaches bash-Skript mithilfe einer bash
bash "install_something" do user "root" cwd "/tmp" code <<-EOH touch somefile EOH not_if do File.exists?("/tmp/somefile") end end
Die bash
-Ressource ist wie folgt konfiguriert.
-
Sie verwendet die
run
-Standardaktion zur Ausführung der Befehle imcode
-Block.In diesem Beispiel ist nur ein einziger Befehl (
touch somefile
) vorhanden, aber eincode
-Block kann mehrere Befehle enthalten. -
Das
user
-Attribut gibt den Benutzer an, der den Befehl ausführt. -
Das
cwd
-Attribut gibt das Arbeitsverzeichnis an.In diesem Beispiel wird von
touch
eine Datei im Verzeichnis/tmp
erstellt. -
Das
not_if
-Wächterattribut weist die Ressource an, keine Aktion auszuführen, wenn die Datei bereits vorhanden ist.
So führen Sie das Rezept aus
-
Erstellen Sie die Datei
default.rb
, die den vorherigen Beispiel-Code enthält, und speichern Sie diese inrecipes
. -
Führen Sie
kitchen converge
aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob die Datei in/tmp
vorhanden ist.
Ausführen von Skripts
Die script
-Ressource ist sehr praktisch, insbesondere, wenn Sie nur einen oder zwei Befehle ausführen möchten. In vielen Fällen ist es jedoch sinnvoller, das Skript in einer Datei zu speichern und diese auszuführen. Mit der execute
script
aus dem vorherigen Beispiel angepasst, um mithilfe von execute
ein einfaches Shell-Skript auszuführen. Sie können das Beispiel problemlos für komplexere Skripte oder andere ausführbare Dateitypen erweitern.
So richten Sie die Skriptdatei ein
-
Fügen Sie ein Unterverzeichnis
files
zuscript
und ein Unterverzeichnisdefault
zufiles
hinzu. -
Erstellen Sie eine Datei namens
touchfile
, die Folgendes enthält, und fügen Sie sie zufiles/default
hinzu. In diesem Beispiel wird ein gängiger bash-Interpreter genutzt, aber Sie können bei Bedarf auch einen Interpreter wählen, der für Ihre Shell-Umgebung geeignet ist.#!/usr/bin/env bash touch somefile
Die Skriptdatei kann beliebig viele Befehle enthalten. In diesem Beispielskript ist aus Gründen der Übersichtlichkeit nur ein
touch
-Befehl enthalten.
Mit dem folgenden Rezept wird das Skript ausgeführt.
cookbook_file "/tmp/touchfile" do source "touchfile" mode 0755 end execute "touchfile" do user "root" cwd "/tmp" command "./touchfile" end
Von der Ressource cookbook_file
wird die Skriptdatei in /tmp
kopiert, zudem wird der Modus festgelegt, damit die Datei ausführbar ist. Die execute
-Ressource führt dann die Datei wie folgt aus:
-
Das
user
-Attribut gibt den Benutzer des Befehls an (in diesem Beispielroot
). -
Das Attribut
cwd
gibt das Arbeitsverzeichnis an (in diesem Beispiel/tmp
). -
Das
command
-Attribut gibt das auszuführende Skript an (in diesem Beispieltouchfile
), das im Arbeitsverzeichnis gespeichert ist.
So führen Sie das Rezept aus
-
Ersetzen Sie den Code in
recipes/default.rb
durch das vorherige Beispiel. -
Führen Sie
kitchen converge
aus und melden Sie sich anschließend an der Instance an, um zu prüfen, ob/tmp
nun die Skriptdatei, den Modus 0755 undsomefile
enthält.
Wenn Sie fertig sind, führen Sie kitchen destroy
aus und fahren damit die Instance herunter. Im nächsten Abschnitt wird ein neues Rezeptbuch verwendet.