我正在做一些我認爲是適度聰明的事情,而且它已經可以預料會再次咬我。連接到正在運行的Google Cloud Dataflow worker中的tmux會話
我有一個編譯好的二進制文件,我的工作人員下載和shell出來。 這個二進制文件需要很長時間才能啓動(60s),然後它監聽stdin並在stdout上發出。 爲了避免爲每位工作人員支付超過一次的啓動成本,我在startBundle
的tmux會話中啓動二進制文件。在processElement
中,我使用tmux send-keys
命令將工作項目傳送到正在運行的tmux會話,然後讀出結果。
具體來說,TMUX啓動命令是:
tmux new-session -d -s word2vecdistance "./distance GoogleNews-vectors-negative300.bin > /tmp/word2vec_distance_log.txt"
的查詢可能是這樣的:
tmux send-keys -t word2vecdistance love C-m
這絕對是令人費解的,但它工作在本地對我來說,無論是在我的單元測試如果我使用DirectPipelineRunner
。 但是,如果我在雲中運行,查詢命令會導致此TMUX錯誤:
failed to connect to server: Connection refused
我的猜測是TMUX想一些權限/端口不可用在泊塢工數據流使用,但是這就我所知。
您的智慧將不勝感激。 CLARIFICATION 0:這一切都發生在單個(Dataflow)Docker容器內,即我試圖連接到同一個容器中的tmux會話。
CLARIFICATION 1:我不認爲我可以控制如何調用Docker容器;這是Google Cloud Dataflow管理的內容。
你還在遇到這個問題嗎? –