Startup script doesn’t seem to work on GCE (Google Compute Engine).
在 GCP 中的 GCE 建立 VM 時常會有要順便安裝或設置的套件與服務的需求,並將其打包成一個 startup script
送過去,但是時常會發生機器啟動後卻沒有順利地被安裝。最直接的原因就是 script 出錯或是根本沒被執行,本文將提供快速簡單的方法查證自己的 script 到底在哪裡出錯了。
在本範例你會學到:
- 快速排除不明的 startup script 執行失敗
在本範例你需要先準備好:
- 有 GCP 的帳號
- 有使用 GCE 的經驗/需求
1.簡易的使用 GCE 指令
在這裡稍微複習一下如何使用指令啟動 GCE 的 VM 指令:
--project
: 專案名稱(GCP畫面上方就可以看到)--address
: 是否要指定 IP 位置--zone
: 選擇建立機器的區域--machine-type
: 機器的類型--network
: 網路相關設定--service-account
: 服務帳號--boot-disk-size
: 硬碟容量大小--boot-disk-type
: 硬碟類型--metadata-from-file startup-script
: 啟動機器第一個要執行的 script 位置
完整的範例如下:
gcloud compute --project=gce-test instances create test-vm \
--address=123.123.123.123 \
--zone=asia-east1-b \
--machine-type=n1-highcpu-4 \
--network=default --maintenance-policy=MIGRATE \
--service-account=your_service_account \
--scopes=https://www.googleapis.com/auth/cloud-platform \
--boot-disk-size=10GB --boot-disk-type=pd-standard
--metadata-from-file startup-script=/root/script/startupscript.sh
以上為常用的相關指令,其他指令放在下方參考資料請自行選用
2.查看未執行 startup-script 方式
如果順利地使用上方的方式啟動機器,並設置好自己要帶過去的 script 後,卻發現安裝的東西或是服務並沒有被啟動或設置,就可以使用以下指令(於啟動的 VM 環境中執行):
sudo journalctl -u google-startup-scripts.service
這個指令會列出開機執行後所執行的相關指令,如果有相關的錯誤也會寫在上面,就是 log 檔的概念。基本上只要是 script 本身的問題都可以用這個方式找到原因,以上分享。
有任何問題歡迎與我聯絡,謝謝。
參考資料
更多 GCE 指令請詳見:
Stackoverflow:
https://stackoverflow.com/questions/44084713/startup-script-doesnt-seem-to-work