Shutdown-Skripts ausführen

Sie können Shutdown-Skripts erstellen und aktivieren, die unmittelbar vor dem Beenden oder Neustarten einer Instanz Befehle ausführen. Automatische Skripts sind vor allem nützlich, wenn Instanzen vor dem Starten oder Beenden genug Zeit haben sollen, Bereinigungsvorgänge auszuführen oder Aufgaben zu erledigen (z. B. Export von Logs oder Synchronisation mit anderen Systemen).

Shutdown-Skripts sind besonders nützlich bei Instanzen in einer verwalteten Instanzgruppe mit Autoscaling. Wenn das Autoscaling eine Instanz in der Gruppe schließt, wird das Shutdown-Skript ausgeführt, bevor sie tatsächlich geschlossen wird. Das Skript führt alle Aktionen aus, die Sie dafür definiert haben. Das Skript wird während der begrenzten Shutdown-Phase ausgeführt, bevor die Instanz beendet wird. Ein Shutdown-Skript kann zum Beispiel verarbeitete Daten in Cloud Storage speichern oder Protokolle sichern.

Shutdown-Skripts funktionieren ähnlich wie Startskripts. Ein Großteil der Dokumentation für Startskripts gilt auch für Shutdown-Skripts.

Vorbereitung

Erforderliche Berechtigungen für diese Aufgabe

Zum Ausführen dieser Aufgabe benötigen Sie die folgenden Berechtigungen:

  • Alle Berechtigungen, die für das Erstellen einer Instanz erforderlich sind.
  • compute.instances.setMetadata für die Instanz

Spezifikationen

Beschränkungen

Bei der Verwendung von Shutdown-Skripts gibt es einige Beschränkungen:

  • Für die Ausführung von Shutdown-Skripts steht vor dem Beenden der Instanz nur eine begrenzte Zeit zur Verfügung:
    • On-Demand-Instanzen: 90 Sekunden nach Beenden oder Löschen einer Instanz
    • Instanzen auf Abruf: 30 Sekunden nach Beginn des vorzeitigen Beendens der Instanz
  • Compute Engine führt Shutdown-Skripts nur nach Best-Effort-Prinzip aus. In seltenen Fällen kann Compute Engine daher nicht garantieren, dass das Shutdown-Skript abgeschlossen wird.
  • Bei Linux-Instanzen können Sie Shutdown-Skripts nur mit der Image-Version v20141007 oder höher verwenden. Bei Windows Server-Instanzen ist dies nur mit einer Image-Version ab v20150310 möglich.

Shutdown-Skripts aufrufen

Shutdown-Skripts werden durch bestimmte ACPI-Ereignisse (Advanced Configuration and Power Interface) ausgelöst, zum Beispiel Neustart oder Beenden. Zum Neustarten oder Beenden gibt es viele Möglichkeiten, aber nur einige davon lösen das Skript aus. Das Shutdown-Skript wird im Rahmen der folgenden Aktionen ausgeführt:

  • Wenn eine Instanz aufgrund der an die API gesendeten Anfrage instances.delete oder instances.stop heruntergefahren wird
  • Wenn Compute Engine eine Instanz auf Abruf im Rahmen der vorzeitigen Beendigung anhält
  • Wenn eine Instanz durch eine Anfrage an das Gastbetriebssystem wie sudo shutdown oder sudo reboot beendet wird
  • Wenn eine Instanz manuell heruntergefahren wird – über die Cloud Console oder mit dem gcloud compute-Tool

Das Shutdown-Skript wird nicht ausgeführt, wenn die Instanz durch instances().reset zurückgesetzt wird.

Ein Shutdown-Skript kann einen beliebigen Dateityp haben. Gibt es ein Shutdown-Skript, macht Compute Engine folgendes:

  1. Sie kopiert das Skript in eine lokale Datei in der Instanz.
  2. Sie legt die Berechtigungen der Datei so an, dass sie ausgeführt werden kann.
  3. Sie führt die Datei aus, wenn die Instanz beendet wird.

So können Sie zum Beispiel ein Python-Skript statt eines Bash-Skripts verwenden. Aber denken Sie daran, dass Compute Engine das Skript so ausführt, wie es ist. Dabei kommt es nicht auf die Art des Skripts an.

Bei der Ausführung eines Skripts, das nicht in Bash geschrieben ist, müssen Sie eine Shebang-Zeile zu Beginn der Datei hinzufügen, damit das Betriebssystem erkennen kann, welcher Interpreter verwendet werden muss. Bei einem Python-Skript können Sie zum Beispiel die folgende Shebang-Zeile hinzufügen:

#!/usr/bin/python

Ausführungszeit für das Shutdown-Skript

Das Shutdown-Skript hat nur wenig Zeit, bevor die Instanz geschlossen wird oder neu startet. In diesem Zeitraum versucht Compute Engine Ihr Shutdown-Skript auszuführen. Wenn das Skript länger braucht, wird die Instanz automatisch beendet und alle laufenden Aufgaben werden abgebrochen. Wenn Sie eine Instanz durch eine Anfrage an das Gastbetriebssystem mit dem Befehl sudo shutdown beenden oder neu starten, gilt diese Einschränkung nicht.

Die Dauer des Shutdowns hängt von der Art der Instanz ab. Präemptive Instanzen haben eine kürzere Shutdown-Dauer als normale Instanzen. Weitere Informationen zu den Zeitlimits für den Shutdown jedes Instanztyps finden Sie unter Shutdown-Dauer.

Ihr Shutdown-Skript sollte generell innerhalb der Shutdown-Dauer abgeschlossen werden, damit das Betriebssystem genug Zeit hat, den eigenen Shutdown-Vorgang abzuschließen und den Zwischenspeicher auf die Festplatte zu verschieben.

Lokale Shutdown-Skripts

Ein lokales Shutdown-Skript ist auf Ihrem lokalen Computer ansässig. Sie können es als Datei verwenden oder den Inhalt direkt an Compute Engine weiterleiten.

Mit Shutdown-Skripts können so viele Aktionen wie nötig ausgeführt werden. Wenn Sie die Datei jedoch lokal übertragen, darf Ihr Skript die Längenbeschränkung für Metadatenwerte von 256 KB nicht überschreiten. Um ein Skript zu verwenden, das die Längenbeschränkung überschreitet, sollten Sie Ihre Datei in Cloud Storage speichern. Weitere Informationen finden Sie unter Shutdown-Skript aus Cloud Storage verwenden.

Shutdown-Skriptdatei angeben

Sie können eine lokale Shutdown-Skriptdatei nur über das gcloud-Befehlszeilentool übertragen.

Geben Sie zum Übertragen einer lokalen Shutdown-Skriptdatei das Flag --metadata-from-file gefolgt vom Metadaten-Schlüsselpaar shutdown-script=PATH/TO/FILE an, wobei PATH/TO/FILE für den relativen Pfad zum Shutdown-Skript steht. Beispiel:

gcloud compute instances create example-instance \
    --metadata-from-file shutdown-script=examples/scripts/install.sh

Shutdown-Skriptinhalte direkt angeben

Alternativ können Sie die Inhalte Ihres Shutdown-Skripts auch direkt eingeben.

Konsole

In der Cloud Console können Sie ein Shutdown-Skript direkt mit dem Metadatenschlüssel shutdown-script angeben:

  1. Rufen Sie in der Cloud Console die Seite VM-Instanzen auf.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen.
  3. Geben Sie auf der Seite Neue Instanz erstellen die Attribute für Ihre Instanz ein. Maximieren Sie für weitere Konfigurationsoptionen den Abschnitt Verwaltung, Sicherheit, Laufwerke, Netzwerk, einzelne Mandanten.
  4. Geben Sie im Abschnitt Metadaten shutdown-script als Metadatenschlüssel ein.
  5. Geben Sie im Feld Werte den Inhalt Ihres Shutdown-Skripts an.
  6. Klicken Sie auf Erstellen, um die Instanz anzulegen.

gcloud

Verwenden Sie das gcloud-Befehlszeilentool, um das Flag --metadata mit dem Inhalt des Shutdown-Skripts gefolgt vom Schlüsselpaar shutdown-script=CONTENTS anzugeben, wobei CONTENTS für den Inhalt des Skripts steht.

gcloud compute instances create example-instance --metadata shutdown-script="#! /bin/bash
> # Shuts down Apache server
> /etc/init.d/apache2 stop"

API

Beim Erstellen einer Instanz können Sie ein Shutdown-Skript als Teil des Metadatenattributs für Ihre Anfrage angeben. Verwenden Sie shutdown-script als Metadatenschlüssel:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/instances

{...
  "metadata": {
    "items": [
      {
       "key": "shutdown-script",
       "value": "#! /bin/bash\n\n# Shuts down Apache server\n/etc/init.d/apache2 stop"
      }
    ]
  }...
}

Shutdown-Skript für Windows-Instanzen angeben

Sie können Shutdown-Skripte auf Windows-Instanzen mit den folgenden Metadatenschlüsseln für Windows ausführen. Wählen Sie einen der folgenden Sonderschlüssel. Jeder Schlüssel sollte zu dem Skript passen, das Sie verwenden wollen.

Sie können anhand verschiedener Schlüssel in Ihrer Instanz mehrere Shutdown-Skripts verwenden. Dabei darf jedoch jeder Schlüssel pro virtueller Maschine nur einmal verwendet werden.

Die folgenden Schlüssel können wie oben beschrieben für lokale Shutdown-Skripts verwendet werden.

cmd-Shutdown-Skripts bat-Shutdown-Skripts ps1-Shutdown-Skripts
windows-shutdown-script-cmd windows-shutdown-script-bat windows-shutdown-script-ps1

Shutdown-Skript aus Cloud Storage verwenden

Sie können Shutdown-Skripts in Cloud Storage speichern und von dort aus verwendet werden. Folgen Sie der Anleitung in der Dokumentation zu Startskripts, aber ersetzen Sie startup-script-url durch shutdown-script-url.

Ersetzen Sie bei Windows-Instanzen windows-startup-script-url durch windows-shutdown-script-url.

Shutdown-Skript auf laufende Instanzen anwenden

Folgen Sie der Anleitung in der Dokumentation Startskript für laufende Instanzen anwenden. Ersetzen Sie die Metadatenschlüssel mit einem der folgenden:

  • shutdown-script: Geben Sie mit diesem Schlüssel den Inhalt des Shutdown-Skripts direkt an. Mit dem gcloud-Befehlszeilentool können Sie den Pfad für ein Shutdown-Skript mit dem Flag --metadata-from-file und dem Metadatenschlüssel shutdown-script angeben.
  • shutdown-script-url: Geben Sie mit diesem Schlüssel die Cloud Storage-URL zur Shutdown-Skriptdatei an.