1. 程式人生 > >k8s 一個容器啟動多個阻塞程序

k8s 一個容器啟動多個阻塞程序

更多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" 順序執行 成功          
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 失敗
          #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