Google-Compute-Engine
“無法啟動執行雲使用者/最終腳本”。: 執行雲使用者/最終腳本時Google計算實例命中錯誤
問題
如果我沒有 SSH 密鑰並且 google 使用者/最終腳本無法執行,我如何連接到 Google 實例?
問題背景
執行 Ubuntu 16.04 LTS 的 Google 計算實例。
我改變了它的基本版本的python,以便安裝一個對python的’setup-tools’非常挑剔的python包。
我的理論是這種變化破壞了Google云腳本的啟動,這是我過去連接到實例的唯一方式。
問題詳情
我們可以驗證伺服器是否已打開,因為它在此處為不良 nginx 網路提供服務:http: //35.201.199.224/
我有一個伺服器日誌,如果有人願意幫助我在這裡閱讀,我可以在這里分享:https ://pastebin.com/DF5wsLhH
我認為最重要的部分是這個片段
Mar 21 17:21:50 instance-1 systemd[1]: Started Google Compute Engine Network Daemon. Mar 21 17:21:51 instance-1 google_network_daemon[1340]: Traceback (most recent call last): Mar 21 17:21:51 instance-1 google_network_daemon[1340]: File "/usr/bin/google_network_daemon", line 9, in <module> Mar 21 17:21:51 instance-1 google_network_daemon[1340]: load_entry_point('google-compute-engine==2.8.4', 'console_scripts', 'google_network_daemon')() Mar 21 17:21:51 instance-1 google_network_daemon[1340]: File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 542, in load_entry_point Mar 21 17:21:51 instance-1 google_network_daemon[1340]: return get_distribution(dist).load_entry_point(group, name) Mar 21 17:21:51 instance-1 google_network_daemon[1340]: File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2569, in load_entry_point Mar 21 17:21:51 instance-1 google_network_daemon[1340]: return ep.load() Mar 21 17:21:51 instance-1 google_network_daemon[1340]: File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2229, in load Mar 21 17:21:51 instance-1 google_network_daemon[1340]: return self.resolve() Mar 21 17:21:51 instance-1 google_network_daemon[1340]: File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 2235, in resolve Mar 21 17:21:51 instance-1 google_network_daemon[1340]: module = __import__(self.module_name, fromlist=['__name__'], level=0) Mar 21 17:21:51 instance-1 google_network_daemon[1340]: File "/usr/lib/python3/dist-packages/google_compute_engine/networking/network_daemon.py", line 26, in <module> Mar 21 17:21:51 instance-1 google_network_daemon[1340]: from google_compute_engine import config_manager Mar 21 17:21:51 instance-1 google_network_daemon[1340]: File "/usr/lib/python3/dist-packages/google_compute_engine/config_manager.py", line 23, in <module> Mar 21 17:21:51 instance-1 google_network_daemon[1340]: from google_compute_engine.compat import parser Mar 21 17:21:51 instance-1 google_network_daemon[1340]: File "/usr/lib/python3/dist-packages/google_compute_engine/compat.py", line 23, in <module> Mar 21 17:21:51 instance-1 google_network_daemon[1340]: import distro Mar 21 17:21:51 instance-1 google_network_daemon[1340]: ModuleNotFoundError: No module named 'distro'
我認為它找不到這個模組,因為它正在尋找錯誤的 python 版本。
結論
我確實明白,我只能通過使用 Google 的“通過 SSH 連接按鈕”進行連接,這是不可原諒的懶惰,但我天真地認為,西方世界可以說是最好的商業開發人員會為我掌控一切。
您可能必須執行以下操作:
- 關閉這個虛擬機(不刪除磁碟!)
- 創建一個新的虛擬機
- 以讀/寫模式安裝此磁碟
- 修復 Python 安裝以允許腳本執行以啟用 SSH 會話
如果此 VM 正在提供您不會失去的實時流量,請考慮以下事項:
- 從此虛擬機的永久磁碟創建快照
- 從快照創建一個新的 GCE VM 實例
- 修復它,使其執行並能夠服務請求
- 將流量重定向到此服務實例
- 修復原盤
此外,考慮使用容器來執行特定版本的依賴項,這些依賴項需要不同的基礎工具(例如 Python),否則可能會與系統工具或外部程序(例如 SSH 之前/之後腳本等)發生衝突。