我在docker里面创建了一个ubuntu的容器,在容器里面写了一个脚本用来执行java项目,脚本命令如下:
#!/bin/bash
echo "$(date) 启动MySQL和Java应用..."
# 启动MySQL
/usr/local/mysql/bin/mysqld_safe &
echo "MySQL启动命令已执行"
# 等待MySQL充分启动(增加等待时间)
echo "等待MySQL启动..."
sleep 10
# 检查MySQL是否真的启动了
if netstat -tln | grep -q 3306; then
echo "MySQL启动成功,端口3306已监听"
else
echo "MySQL可能启动失败"
fi
# 启动Java应用
echo "切换到/home目录"
cd /home
echo "当前目录: $(pwd)"
# 启动Java应用并记录PID
java -jar warehouse-0.0.1-SNAPSHOT.jar&
JAVA_PID=$!
echo "Java应用启动命令已执行,PID: $JAVA_PID"
# 等待Java应用启动
sleep 20
echo "启动完成,检查进程状态:"
执行命令是:
docker exec -it 592f1182c3ca /bin/bash -c "/home/java.sh"
发现这个命令执行完后mysql可以后他运行,java项目挂了,怎么都访问不到。
原因:问题是Java进程在脚本执行结束后就被终止了。这是因为脚本退出时,会向所有子进程发送SIGHUP信号,导致Java进程退出。
解决办法:在java -jar 前面加一个nohup
nohup java -jar warehouse-0.0.1-SNAPSHOT.jar&

被折叠的 条评论
为什么被折叠?



