bash - 为什么 docker exec 在退出时杀死 nohup 进程?

标签 bash docker 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

问题是 java.sh 在 docker exec 返回后立即被杀死。问题是为什么?

我发现的唯一解决方案是在 nohup 启动后将一些虚拟 sleep 1 添加到第一个脚本中。第二个过程运行良好。你知道为什么会这样吗?

[编辑]

第二种解决方案是在 sleep 前向 java.sh 脚本添加一些 echotrap 命令。比它工作正常。不幸的是,我不能使用这个解决方法,因为我有 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/

相关文章:

linux - 如何在 nohup 输出中找到具有特定文件名的模式?

用于公钥身份验证的 bash/ssh 测试

bash - 从 shell 脚本逐行读取文件

c++ - 如何查看 C 头文件的源代码?

azure - 如何在 Windows 版 Docker 上运行 Cosmos DB 模拟器?

node.js - 使用 nohup/supervise 命令的日志重定向问题

bash - 在 bash 中传递空变量

docker - 最适合仅数据容器的容器?

docker - 仅在Docker中重建代码

python - 如何在 Windows 后台持续运行 Python 脚本?