bash – 为什么docker exec在退出时杀死nohup进程?
我已经运行了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进程.