我已经运行了docker ubuntu容器,里面只有一个bash脚本.我想用docker exec在那个容器内启动我的应用程序:
docker exec -it 0b3fc9dd35f2 ./main.sh
Run Code Online (Sandbox Code Playgroud)
在主脚本里面我想用nohup运行另一个应用程序,因为这是一个运行时间很长的应用程序:
#!/bin/bash
nohup ./java.sh &
#with this strange sleep the script is working
#sleep 1
echo `date` finish main >> /status.log
Run Code Online (Sandbox Code Playgroud)
java.sh脚本如下(为简单起见,它是一个虚拟脚本):
#!/bin/bash
sleep 10
echo `date` finish java >> /status.log
Run Code Online (Sandbox Code Playgroud)
问题是在docker exec返回后java.sh被立即杀死.问题是为什么?
我发现的唯一解决方案是sleep 1在nohup启动后在第一个脚本中添加一些虚拟.比第二个进程运行正常.你知道为什么会这样吗?
[编辑]
第二种解决方案是在睡眠前向脚本添加一些echo或trap命令java.sh.比它工作正常.不幸的是我不能使用这个解决方法而不是这个脚本我有java进程.