Crea ed esegui script di arresto che eseguono comandi appena prima dell'arresto o del riavvio di un'istanza di una macchina virtuale (VM). Questa opzione è utile se ti basi su script automatici per avviare e arrestare le istanze, consentendo alle istanze di eseguire operazioni di pulizia o altre attività, come l'esportazione dei log o la sincronizzazione con altri sistemi.
Gli script di arresto sono particolarmente utili per le VM in un gruppo di istanze gestite con un autoscaler. Se il gestore della scalabilità automatica arresta una VM nel gruppo, lo script di arresto viene eseguito prima dell'arresto della VM ed esegue le azioni che hai definito. Lo script viene eseguito durante il periodo di arresto limitato prima dell'interruzione della VM. Ad esempio, lo script di arresto potrebbe copiare i dati elaborati in Cloud Storage o eseguire il backup di eventuali log.
Gli script di arresto funzionano in modo molto simile agli script di avvio. Gran parte della documentazione relativa agli script di avvio si applica anche agli script di arresto.
Per le attività di arresto e riavvio, le VM eseguono sempre gli script di arresto come segue:
- Per le VM Linux, utilizzando l'utente
root
. - Per le VM Windows, utilizzando l'account
System
.
Prima di iniziare
- Scopri di più sugli script di avvio.
- Scopri che cos'è il server di metadati.
-
Se non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi Google Cloud.
Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:
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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
- Tutte le autorizzazioni necessarie per creare un'istanza
compute.instances.setMetadata
nell'istanza- Gli script di arresto hanno un tempo limitato per completare l'esecuzione prima dell'interruzione dell'istanza:
- Istanze on demand: 90 secondi dopo l'arresto o l'eliminazione di un'istanza
- Istanze preemptible: 30 secondi dopo l'inizio del prelievo delle istanze
- Compute Engine esegue gli script di arresto solo su una base di miglior impegno. In rari casi, Compute Engine non può garantire che lo script di arresto verrà completato.
- Su Windows, i Criteri di gruppo locali vengono utilizzati per avviare lo script di arresto.
- Il pacchetto di installazione configura l'impostazione dei criteri di gruppo locali
Computer Configuration/Windows Setting/Scripts (Startup/Shutdown)
per avviare lo script all'arresto del sistema.
- Il pacchetto di installazione configura l'impostazione dei criteri di gruppo locali
- Quando un'istanza si arresta a causa di una richiesta
instances.delete
oinstances.stop
all'API. - Quando Compute Engine interrompe un'istanza prerilasciabile nell'ambito della procedura di preemption.
- Quando un'istanza si arresta tramite una richiesta al sistema operativo guest, ad esempio
sudo shutdown
osudo reboot
. - Quando arresti manualmente un'istanza tramite la console Google Cloud o lo strumento
gcloud compute
. - Copia lo script in un file locale nell'istanza.
- Imposta le autorizzazioni sul file per renderlo eseguibile.
- Esegui il file quando l'istanza è arrestata.
Vai alla pagina Crea un'istanza.
Specifica i dettagli della VM.
Espandi la sezione Opzioni avanzate.
Espandi Gestione ed esegui le seguenti operazioni:
- Nella sezione Metadati, fai clic su Aggiungi elemento.
- Nel campo Chiave, inserisci
shutdown-script
per la chiave dei metadati. - Nel campo Valore, aggiungi i contenuti dello script di arresto.
Continua con la procedura di creazione della VM.
shutdown-script
: fornisci i contenuti dello script di arresto diretto con questa chiave. Con Google Cloud CLI, puoi fornire il percorso di un file script di spegnimento utilizzando il flag--metadata-from-file
e la chiave dei metadatishutdown-script
.shutdown-script-url
: fornisci un URL di Cloud Storage al file dello script di arresto con questa chiave.Connettiti all'istanza ed esegui il seguente comando:
sudo journalctl -u google-shutdown-scripts.service
Visualizza l'output tramite la porta seriale 1 nella console Google Cloud e controlla la presenza di eventi
google_metadata_script_runner
.IAP Desktop da una workstation Windows. Per maggiori informazioni, consulta il repo GoogleCloudPlatform/iap-desktop su GitHub.
Porta seriale 1 nella console Google Cloud. Per ulteriori informazioni, consulta la sezione Visualizzazione dell'output della porta seriale.
Log applicazioni di Visualizzatore eventi di Windows.
IAP Desktop da una workstation Windows. Per maggiori informazioni, consulta il repo GoogleCloudPlatform/iap-desktop su GitHub.
Terraform
Per utilizzare gli esempi di Terraform in questa pagina in un ambiente di sviluppo locale, installa e inizializza gcloud CLI, quindi configura le Credenziali predefinite dell'applicazione con le tue credenziali utente.
Per ulteriori informazioni, consulta Set up authentication for a local development environment.
REST
Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Per ulteriori informazioni, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione sull'autenticazione di Google Cloud.
Autorizzazioni richieste per questa attività
Per eseguire questa attività, devi disporre delle seguenti autorizzazioni:
Specifiche
Limitazioni
Esistono alcune limitazioni da tenere presenti quando si utilizzano gli script di arresto:
Richiamo dello script di chiusura
Gli script di arresto vengono attivati da determinati eventi ACPI (Advanced Configuration and Power Interface), come riavvii o arresti. Esistono molti modi per riavviare o interrompere un'istanza, ma solo alcuni attivano l'esecuzione dello script di arresto. Uno script di spegnimento viene eseguito nell'ambito delle seguenti azioni:
Lo script di arresto non verrà eseguito se l'istanza viene reimpostata utilizzando
instances().reset
.Uno script di arresto può essere di qualsiasi tipo di file. Se è presente uno script di arresto, Compute Engine:
Ad esempio, puoi fornire uno script Python anziché uno script bash. Tieni presente che Compute Engine esegue lo script alla lettera, indipendentemente dal tipo di script.
Per eseguire uno script diverso da bash, aggiungi una riga shebang nella parte superiore del file per indicare al sistema operativo quale interprete utilizzare. Ad esempio, per uno script Python, puoi aggiungere una riga shebang come:
#!/usr/bin/python
Tempo di esecuzione dello script di chiusura
Prima che un'istanza venga arrestata o riavviata, lo script di arresto ha un periodo di tempo limitato per l'esecuzione. Durante questo periodo, Compute Engine tenta di eseguire lo script di arresto. Se lo script richiede più tempo per essere completato, l'istanza si arresta automaticamente e tutte le attività in esecuzione vengono interrotte. Se chiudi o riavvii un'istanza inviando una richiesta al sistema operativo guest con il comando
sudo shutdown
, il limite non si applica.La durata del periodo di arresto varia a seconda del tipo di istanza. Le istanze prerilasciabili hanno un periodo di arresto più breve rispetto alle normali istanze. Per ulteriori informazioni sui limiti di tempo di spegnimento per ogni tipo di istanza, consulta Periodo di spegnimento.
In genere, lo script di arresto deve terminare l'esecuzione entro il periodo di arresto in modo che il sistema operativo abbia il tempo di completare la procedura di arresto e svuotare i buffer sul disco.
Utilizzare uno script di arresto locale
Uno script di arresto locale è uno script che si trova sul tuo computer locale. Passa uno script di arresto locale come file o fornendo i contenuti direttamente a Compute Engine.
Gli script di arresto possono eseguire tutte le azioni necessarie, ma se lo script viene passato localmente, non può superare il limite di lunghezza del valore dei metadati di 256 KB. Per utilizzare uno script che supera il limite di lunghezza, archivia il file su Cloud Storage. Per ulteriori informazioni, consulta Utilizzare lo script di arresto da Cloud Storage.
Fornisci un file di script di chiusura
Puoi passare un file di script di arresto locale solo tramite lo strumento a riga di comando
gcloud
.gcloud
Per passare un file di script di arresto locale, fornisci il flag
--metadata-from-file
followed by a metadata key pair,shutdown-script=PATH/TO/FILE
, dovePATH/TO/FILE
è un percorso relativo allo script di arresto. Ad esempio:gcloud compute instances create example-instance \ --metadata-from-file shutdown-script=examples/scripts/install.sh
Terraform
Per specificare direttamente uno script di arresto, utilizza la risorsa
google_compute_instance
con il percorso dello script di arresto nei metadati.Fornire direttamente i contenuti dello script di chiusura
In alternativa, puoi passare direttamente i contenuti dello script di arresto.
Console
Nella console Google Cloud, specifica uno script di arresto utilizzando direttamente la chiave dei metadati
shutdown-script
:gcloud
Utilizzando Google Cloud CLI, utilizza il flag
--metadata
per fornire i contenuti dello script di arresto, seguito dalla coppia di chiavishutdown-script=CONTENTS
, doveCONTENTS
è il contenuto dello script di arresto.gcloud compute instances create example-instance --metadata shutdown-script="#! /bin/bash > # Shuts down Apache server > /etc/init.d/apache2 stop"
Terraform
Per specificare direttamente uno script di arresto, utilizza la risorsa
google_compute_instance
con lo script di arresto nei metadati.REST
Nell'API, fornisci uno script di arresto anomalo come parte della proprietà dei metadati nella richiesta quando crei un'istanza. Utilizza
shutdown-script
come chiave dei metadati: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" } ] }... }
Fornire uno script di arresto su istanze Windows
Esegui script di arresto su istanze Windows utilizzando le seguenti chiavi di metadati specifiche per Windows. Scegli una delle chiavi specializzate elencate di seguito. Ogni chiave deve corrispondere al tipo di script che vuoi eseguire.
Puoi specificare più script di arresto passando chiavi diverse all'istanza, ma ogni chiave può essere specificata una sola volta per macchina virtuale.
Le seguenti chiavi possono essere utilizzate con uno script di arresto locale, utilizzando le stesse istruzioni sopra.
cmd
script di chiusurabat
script di chiusuraps1
script di chiusurawindows-shutdown-script-cmd
windows-shutdown-script-bat
windows-shutdown-script-ps1
Utilizzare uno script di arresto da Cloud Storage
Puoi archiviare e utilizzare uno script di arresto da Cloud Storage. Segui le istruzioni riportate nella documentazione degli script di avvio, ma sostituisci
startup-script-url
conshutdown-script-url
.Per le istanze Windows, sostituisci
windows-startup-script-url
conwindows-shutdown-script-url
.Applicare uno script di arresto alle istanze in esecuzione
Per aggiungere uno script di arresto a un'istanza in esecuzione, segui le istruzioni riportate nella documentazione relativa all'applicazione di uno script di avvio alle istanze in esecuzione, ma sostituisci le chiavi dei metadati con una delle seguenti:
Visualizzazione dell'output di uno script di arresto
Linux
Puoi visualizzare l'output di uno script di arresto di Linux eseguendo una delle seguenti operazioni:
Windows
Visualizza l'output di uno script di arresto di Windows Server utilizzando uno dei seguenti comandi e controllando la presenza di eventi
GCEMetadataScripts
:Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2024-12-19 UTC.
-