2015-04-03 45 views
1

我從shell腳本創建Google Cloud Compute實例,然後通過ssh在該實例上啓動幾個命令。如何確保Google雲計算實例已啓動並運行

如何確保實例中的操作系統啓動並運行?

例如:

gcloud compute instances create "$my_name" \ --tags "http-server" \ --image container-vm \ --metadata-from-file google-container-manifest="container.yml" \ --zone "$my_zone" \ --machine-type g1-small

那麼我想運行或者 gcloud compute ssh \ "$my_name" --zone "$my_zone" \ --command 'sudo docker stop $(sudo docker ps -q -a)'

gcloud compute copy-files \ some.conf [email protected]"$my_name":/existing_dir/ \ --zone "$my_zone"

據我瞭解,第二個命令可能會失敗,連接拒絕,如果該實例沒有啓動。

如何確保實例已啓動並準備好接受ssh連接?

回答

1

只需在發送命令之前檢查SSH端口是否打開。 SSH服務器將不起來,直到實例OS達:

IP=$(gcloud compute instances list | awk '/'$my_name'/ {print $5}') 
if nc -w 1 -z $IP 22; then 
    echo "OK! Ready for heavy metal" 
    : Do your heavy metal work 
else 
    echo "Maybe later?" 
fi 

說明:

  1. 獲取IP例如$ MY_NAME
  2. 檢查端口22接受入站連接。

-w:連接超時(即1秒應該更多的是足夠了)

-z:檢查只有當端口是開放的出境inmediately

+0

我覺得虛擬機啓動可能需要5秒以上 – 2015-04-06 08:00:42

+1

檢查實例在循環內是否可用。實例引導時間取決於實例引導配置:) – Antxon 2015-04-06 13:31:17

+2

這是一個好方法。需要注意的是,gcloud的默認表格格式旨在方便且易於閱讀,但不是長期穩定的,因此未來可能會添加新字段並打破awk。相反,我建議調用 'gcl​​oud計算實例列表實例名 - 格式json' 以獲得更穩定的輸出格式。你可以用'jq'解析json輸出。 (其他穩定的輸出格式包括文本和yaml。) – 2015-04-06 15:27:35

-1

我認爲startup scripts爲你做的工作:d

或使用REST APIs可以輪詢的實例狀態

+0

REST API的方式需要授權,從shell的角度來看看起來太複雜了。 – 2015-04-03 16:13:14

+0

我猜'container-vm'圖像已經定義了啓動腳本。啓動腳本會使用'container-vm'映像嗎? – 2015-04-03 16:14:50

+0

如果您使用python從shell調用gapi,那麼很簡單:創建一個執行作業並從sh使用它的python腳本。關於預定義的圖像腳本,我認爲它是有效的:試一下,讓我知道! – aqquadro 2015-04-03 16:48:43

0

你可以使用這個命令:gcloud計算實例描述「實例名稱」 --zone 'zone name'| grep「status:RUNNING」

如果您得到確切的輸出狀態:正在運行它會指示實例已啓動並正在運行。

+0

不幸的是,它不起作用 – 2015-04-06 08:51:07

2

容易的跨平臺解決方案:

gcloud compute --verbosity error --project "MYPROJECT" ssh "MYINSTANCE" -- "echo instance now up" -o StrictHostKeyChecking=no

循環,直到你得到errorLevel = 0

相關問題