Shutdown-Skripts ausführen


Erstellen und führen Sie Shutdown-Skripts aus, die unmittelbar vor dem Beenden oder Neustarten einer VM-Instanz Befehle ausführen. Das ist vor allem nützlich, wenn Sie möchten, dass automatische Skripts Instanzen starten oder beenden und andere Instanzen genug Zeit haben sollen, Aufgaben zu erledigen (Export von Logs oder Synchronisation mit anderen Systemen).

Shutdown-Skripts sind besonders nützlich bei VMs in einer verwalteten Instanzgruppe mit Autoscaling. Wenn das Autoscaling eine VM 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 VM 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.

Bei Aufgaben zum Herunterfahren und Neustart führen VMs immer Shutdown-Skripts aus:

  • Für Linux-VMs mit dem Nutzer root.
  • Für Windows-VMs mit dem Konto System.

Hinweise

  • Hier finden Sie Informationen zu Startskripts.
  • Was genau ist der Metadatenserver?
  • Richten Sie die Authentifizierung ein, falls Sie dies noch nicht getan haben. Bei der Authentifizierung wird Ihre Identität für den Zugriff auf Google Cloud-Dienste und APIs überprüft. Zur Ausführung von Code oder Beispielen aus einer lokalen Entwicklungsumgebung können Sie sich so bei Compute Engine authentifizieren.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

      Wenn Sie die Terraform-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung verwenden möchten, installieren und initialisieren Sie die gcloud CLI und richten dann die Standardanmeldedaten für Anwendungen mit Ihren Nutzeranmeldedaten ein.

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. If you're using a local shell, then create local authentication credentials for your user account:

        gcloud auth application-default login

        You don't need to do this if you're using Cloud Shell.

      Weitere Informationen unter Set up authentication for a local development environment.

      REST

      Verwenden Sie die von der gcloud CLI bereitgestellten Anmeldedaten, um die REST API-Beispiele auf dieser Seite in einer lokalen Entwicklungsumgebung zu verwenden.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Weitere Informationen finden Sie unter Für die Verwendung von REST authentifizieren in der Dokumentation zur Google Cloud-Authentifizierung.

Erforderliche Berechtigungen für diese Aufgabe

Zum Ausführen dieser Aufgabe benötigen Sie die folgende Berechtigung:

  • 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-Scripts nur nach Best-Effort-Prinzip aus. In seltenen Fällen kann Compute Engine daher nicht garantieren, dass das Shutdown-Script abgeschlossen wird.
  • Unter Windows wird die lokale Gruppenrichtlinie verwendet, um das Shutdown-Script zu starten.
    • Das Installationspaket konfiguriert die Computer Configuration/Windows Setting/Scripts (Startup/Shutdown)-Einstellung der lokalen Gruppenrichtlinie so, dass das Script beim Herunterfahren des Systems gestartet wird.

Shutdown-Skripts aufrufen

Shutdown-Skripts werden durch bestimmte ACPI-Ereignisse (Advanced Configuration and Power Interface) ausgelöst, zum Beispiel Neustarten oder Beenden. Zum Neustarten oder Beenden gibt es viele Möglichkeiten, aber nur einige davon lösen das Shutdown-Skript aus. Das Shutdown-Skript wird als Teil 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 als Teil der vorzeitigen Beendigung stoppt
  • 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 Google 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. Es kopiert das Skript in eine lokale Datei in der Instanz.
  2. Es legt die Berechtigungen der Datei so fest, dass sie ausgeführt werden kann.
  3. Es führt die Datei aus, wenn die Instanz beendet wird.

Sie können 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.

gcloud

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

Terraform

Wenn Sie ein Shutdown-Script direkt angeben möchten, verwenden Sie die Ressource google_compute_instance mit dem Pfad zum Shutdown-Script in den Metadaten.

resource "google_compute_instance" "shutdown_content_from_file" {
  name         = "instance-name-shutdown-content-from-file"
  machine_type = "f1-micro"
  zone         = "us-central1-c"
  metadata = {
    # Shuts down Apache server
    shutdown-script = file("${path.module}/shutdown-script.sh")
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  network_interface {
    # A default network is created for all Google Cloud projects
    network = "default"
    access_config {
    }
  }
}

Shutdown-Skriptinhalte direkt angeben

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

Console

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

  1. Gehen Sie zur Seite Instanz erstellen.

    Zur Seite „Instanz erstellen“

  2. Geben Sie die VM-Details an

  3. Maximieren Sie den Bereich Erweiterte Optionen.

  4. Maximieren Sie Verwaltung und gehen Sie so vor:

    1. Klicken Sie im Abschnitt Benutzerdefinierte Metadaten auf Element hinzufügen.
    2. Geben Sie im Feld Schlüssel shutdown-script für den Metadatenschlüssel ein.
    3. Geben Sie im Feld Werte den Inhalt Ihres Shutdown-Skripts ein.
  5. Fahren Sie mit dem VM-Erstellungsprozess fort.

gcloud

Verwenden Sie in der Google Cloud-Befehlszeile das Flag --metadata, um den Inhalt Ihres Shutdown-Skripts gefolgt vom Schlüsselpaar shutdown-script=CONTENTS anzugeben, wobei CONTENTS für den Inhalt Ihres Shutdown-Skripts steht.

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

Terraform

Wenn Sie ein Shutdown-Script direkt angeben möchten, verwenden Sie die Ressource google_compute_instance mit dem Shutdown-Script in den Metadaten.

resource "google_compute_instance" "default" {
  name         = "instance-name-shutdown-content-directly"
  machine_type = "f1-micro"
  zone         = "us-central1-c"
  metadata = {
    # Shuts down Apache server
    shutdown-script = "#! /bin/bash /etc/init.d/apache2 stop"
  }
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  network_interface {
    # A default network is created for all Google Cloud projects
    network = "default"
    access_config {
    }
  }
}

REST

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 mehrere Shutdown-Skripts anhand verschiedener Schlüssel in Ihrer Instanz verwenden. Dabei darf jedoch jeder Schlüssel nur einmal pro virtueller Maschine eingesetzt 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 verwenden. 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 der Google Cloud CLI können Sie den Pfad für ein Shutdown-Script 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.

Ausgabe eines Shutdown-Skripts ansehen

Linux

Sie können die Ausgabe eines Linux-Shutdown-Skripts aufrufen, indem Sie eines der folgenden Dinge tun:

Windows

Sehen Sie sich die Ausgabe eines Windows Server-Shutdown-Script an. Verwenden Sie dazu eines der folgenden Dinge und prüfen Sie, ob GCEMetadataScripts-Ereignisse vorhanden sind: