【发布时间】:2020-01-20 05:53:21
【问题描述】:
我正在尝试在 pod 中启动 tomcat 后运行一个 pod-bootstrapping 脚本(它基本上运行一个 java 程序)。我的 pod 运行一个基于 tomcat 的容器。这是我正在工作和重新工作的 sn-p:
- image: myreg/mydir/myimg:local
name: tomcat-adminapp
command: ["/bin/sh"]
args: ["-c", "$CATALINA_HOME/bin/startup.sh && /scripts/runUpg.sh"]
runUpg.sh 脚本:
#!/bin/sh
ls -l $CATALINA_HOME/webapps/app/WEB-INF/lib/
chmod 755 $CATALINA_HOME/webapps/app/WEB-INF/lib/*
java -classpath "$CATALINA_HOME/webapps/app/WEB-INF/lib/*" com.myclass.Upg <args>
tail -f /dev/nul
它正在启动 tomcat,但我的脚本执行失败。当我执行到 pod 中时,我看到战争爆发了,CATALINA_HOME 已设置并且 tomcat 进程正在运行。但我在 kubectl 日志中看到以下脚本错误:
ls: 无法访问'/userhome/tomcat/webapps/app/WEB-INF/lib/': 没有这样的文件或目录 chmod:无法访问'/userhome/tomcat/webapps/app/WEB-INF/lib/*':没有这样的文件或目录 错误:无法找到或加载主类 com.myclass.Upg 引起:java.lang.ClassNotFoundException: com.myclass.Upg
从错误中我猜测 shell 脚本可能没有等待 tomcat 完成启动。我不知道为什么..
当我从 pod 内部手动运行脚本时,它运行良好。
这里的任何指针表示赞赏..
更新:我确认确实是时间问题。当我使用$CATALINA_HOME/bin/startup.sh && sleep 60 && /scripts/runUpg.sh 时,脚本似乎运行良好。但我认为这是 hack-ish 而不是在 webapp 中调用类的正确方法。
【问题讨论】:
标签: tomcat kubernetes