我运行 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
问题是 java.sh 在 docker exec 返回后立即被杀死。问题是为什么?
我发现的唯一解决方案是在 nohup 启动后将一些虚拟 sleep 1
添加到第一个脚本中。第二个过程运行良好。你知道为什么会这样吗?
[编辑]
第二种解决方案是在 sleep 前向 java.sh
脚本添加一些 echo
或 trap
命令。比它工作正常。不幸的是,我不能使用这个解决方法,因为我有 java 进程,而不是这个脚本。
最佳答案
这不是一个答案,但我仍然没有评论所需的声誉。
我不知道为什么 nohup 不起作用。但是我使用您的想法做了一个有效的解决方法:
docker exec -ti running_container bash -c 'nohup ./main.sh &> output & sleep 1'
关于bash - 为什么 docker exec 在退出时杀死 nohup 进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33732061/