【问题标题】:Docker execute ant script after tomcat starts?tomcat启动后Docker执行ant脚本?
【发布时间】:2016-05-25 12:47:59
【问题描述】:

Dockerfile 对 tomcat 正常工作。 tomcat启动后,我要触发ant脚本。 catalina.sh 从一个单独的 run.sh 文件启动。所以,Dockerfile 有 CMD ["/tmp/run.sh"]

run.sh 文件有以下几行:

  • catalina.sh 运行
  • 反脚本

Tomcat 启动但没有调用 ant 脚本。我还尝试了其他可能性,例如:

  • catalina.sh 运行 && antscripts

tomcat 启动但没有触发 antscripts

有没有办法在tomcat启动后自动调用ant脚本?之后我不想使用 docker exec 运行脚本。

【问题讨论】:

  • 您的 antscript 未执行的原因是因为您的 catalina.sh 从未完成。使用 docker,tomcat 进程处于前台,不执行 antscript。
  • 我能想到的实现该功能的方法之一是在 catalina.sh 之前使用 nohup 命令启动 antscripts,并在 antscript 中添加延迟(使用带有 sleep 命令的包装器 shell 脚本)。延迟可以是简单的基于时间的等待,也可以只是观察 tomcat 日志,直到服务器启动完成才能开始执行。
  • 使用 nohup 命令运行包装脚本对我有用。谢谢
  • 酷。那我就给它一个答案。

标签: tomcat ant docker


【解决方案1】:

你可以用下一种方式编写命令:

catalina.sh run & (sleep 20 && antscripts)

它会在 catalina 执行开始后 20 秒内调用 antscripts。您可以更改 tomcat 启动的预计时间。

你也可以等待打开一些 tcp 端口:

catalina.sh run & ((while ! echo exit | nc localhost 8080; do sleep 10; done) && antscripts)

【讨论】:

  • 感谢您在 catalina.sh 运行后使用 & 的想法。我可以触发一个等待 tomcat 启动然后执行 antscripts 的脚本。
  • 但是,问题是脚本结束后docker容器退出了。
【解决方案2】:

其中一种方式,我能想到的实现功能是

  • 在 catalina.sh 之前使用 nohup 命令启动 antscripts,
  • 并在 antscript 中添加延迟(使用带有 sleep 命令的包装器 shell 脚本)。

延迟可以是简单的基于时间的等待,也可以只是观察 tomcat 日志,直到服务器启动完成才能开始执行。

【讨论】:

    猜你喜欢
    • 2012-06-10
    • 2011-12-03
    • 2014-03-12
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 2021-01-13
    相关资源
    最近更新 更多