我已經運行了docker ubuntu容器,里面只有一個bash腳本.我想用docker exec在那個容器內啟動我的應用程式:
docker exec -it 0b3fc9dd35f2 ./main.sh
在主腳本里面我想用nohup運行另一個應用程式,因為這是一個運行時間很長的應用程式:
#!/bin/bash
nohup ./java.sh &
#with this strange sleep the script is working
#sleep 1
echo `date` finish main >> /status.log
java.sh腳本如下(為簡單起見,它是一個虛擬腳本):
#!/bin/bash
sleep 10
echo `date` finish java >> /status.log
問題是在docker exec回傳后java.sh被立即殺死.問題是為什么?
我發現的唯一解決方案是在nohup啟動后在第一個腳本中添加一些虛擬睡眠1.比第二個行程運行正常.你知道為什么會這樣嗎?
[編輯]
第二種解決方案是在睡眠前向java.sh腳本添加一些echo或trap命令.比它作業正常.不幸的是我不能使用這個解決方法而不是這個腳本我有java行程.
uj5u.com熱心網友回復:
這不是答案,但我仍然沒有評論所需的聲譽.我不知道為什么nohup不起作用.但我使用你的想法做了一個有效的解決方法:
docker exec -ti running_container bash -c 'nohup ./main.sh &> output & sleep 1'
uj5u.com熱心網友回復:
解決方案為:docker exec -d 容器名 /bin/bash -c "腳本所在的路徑"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258228.html
標籤:其他技術討論專區
下一篇:發年終獎了,要不要跑路
