k8s 一個容器啟動多個阻塞程序
阿新 • • 發佈:2019-01-28
更多kubernetes文章:k8s專欄目錄
本文記錄了一個容器中同時啟動tensorboard服務以及jupyter notebook服務,兩個阻塞服務的過程。思路:在原有容器啟動jupyter的基礎上再啟動tensorboard即可。嘗試1.啟動 tensorboard即可發現tensorboard啟動成功,jupyter沒有啟動。原因是增加command命令後覆蓋了原有的jupyter啟動命令那麼先啟動tensorboard,然後啟動jupyter,因為兩個程序都是阻塞式的,用nohup & 將tensorboard後臺執行,然後正常啟動jupyter。嘗試2.多command時靈時不靈,感覺command執行沒有順序關係(沒有驗證)。可能先執行了阻塞式的jupyter,就不啟動tensorboard了。嘗試3.將命令寫在sh腳本里,掛載到容器中,然後執行指令碼啟動掛載成功,但是執行找不到指令碼。很奇怪。嘗試4./bin/sh -c "xxxxxx" 順序執行 發現容器啟動失敗,也沒有報錯資訊。在本地測試發現 &需要轉義成\&,否則報錯。\& 違反yaml格式,格式檢查就不通過。 \\& 格式檢查通過,但是實際執行成了\&,沒有掛在後臺執行,後面的jupyter沒有啟動。查了bash -c使用方法 增加()開闢子shell執行方法 即可。 即 (nohup xxxxx &);(xxxx)思路5 指令碼放到dockerfile裡重新打包映象,然後通過指令碼啟動思路6 通過supervisor啟動嘗試記錄 #/bin/sh -c "xxxxxx" 順序執行 成功
#失敗
#失敗
本文記錄了一個容器中同時啟動tensorboard服務以及jupyter notebook服務,兩個阻塞服務的過程。思路:在原有容器啟動jupyter的基礎上再啟動tensorboard即可。嘗試1.啟動 tensorboard即可發現tensorboard啟動成功,jupyter沒有啟動。原因是增加command命令後覆蓋了原有的jupyter啟動命令那麼先啟動tensorboard,然後啟動jupyter,因為兩個程序都是阻塞式的,用nohup & 將tensorboard後臺執行,然後正常啟動jupyter。嘗試2.多command時靈時不靈,感覺command執行沒有順序關係(沒有驗證)。可能先執行了阻塞式的jupyter,就不啟動tensorboard了。嘗試3.將命令寫在sh腳本里,掛載到容器中,然後執行指令碼啟動掛載成功,但是執行找不到指令碼。很奇怪。嘗試4./bin/sh -c "xxxxxx" 順序執行
#多command 失敗command: ["/bin/bash"] args: ["-c", "(nohup tensorboard --logdir=/home/user1/notebooks/storage/file_checkpoint/ > /tmp/tensorboard.log 2>&1 &);(bash /run_jupyter.sh --allow-root)"]
#command:
#- nohup
#- tensorboard
#- --logdir=/home/user1/notebooks/storage/file_checkpoint/ > /tmp/tensorboard.log 2>&1 &
#command:
#- bash
#- /run_jupyter.sh
#- --allow-root
#失敗
#command: ["/bin/sh"] #args: ["-c", "nohup tensorboard --logdir=/home/user1/notebooks/storage/file_checkpoint/ > /tmp/tensorboard.log 2>&1 &;bash /run_jupyter.sh --allow-root"]
#失敗
#args: ["-c", "nohup echo 123 \\\\&;bash /run_jupyter.sh --allow-root"]
#失敗 #command:
#- bash /home/user1/notebooks/storage/start.sh