【发布时间】:2012-09-27 13:28:13
【问题描述】:
我有一个运行多个应用程序的 PCI DSS 兼容环境,我想只重新启动一个应用程序而不重新启动服务器。我没有经理,因为显然在这种环境中是不允许的。
如何通过命令行重新启动单个 Web 应用程序?
【问题讨论】:
标签: jakarta-ee tomcat
我有一个运行多个应用程序的 PCI DSS 兼容环境,我想只重新启动一个应用程序而不重新启动服务器。我没有经理,因为显然在这种环境中是不允许的。
如何通过命令行重新启动单个 Web 应用程序?
【问题讨论】:
标签: jakarta-ee tomcat
我知道我迟到了,但是为了从命令行重新加载应用程序,您可以做的一个小技巧是转到应用程序的 web.xml 并简单地触摸它。
cd webapps/<webapp-name>/WEB-INF/
touch web.xml
tomcat 每次注意到这个文件发生变化时都会重新加载应用程序,如果你只是触摸它,你实际上并没有修改文件,只是时间戳。
【讨论】:
<Host> 元素上具有属性 autoDeploy=true 时才适用(默认情况下)。
我是这样做的:
${TOMCAT}/conf/tomcat-users.xml 中有这样的行:<user username="admin" password="secret" roles="manager-gui,manager-script"/>
否则,由于跨站点请求伪造 (CSRF) 保护,您将收到 403 错误。
使用 curl 或任何你喜欢的命令行工具来获取 URl <yourserver>/manager/text/reload?path=/<context_path>:
curl --user user:secret http://localhost:8080/manager/text/reload?path=/mypath
【讨论】:
如果无法访问管理器应用程序,您将无法执行此操作。如果您可以访问管理器应用程序,但仍想使用命令行而不是 Web 浏览器,您可以尝试使用名为 tomcat-manager 的 command-line script for managing tomcat。它需要 Python,但允许您从 Unix shell 执行以下操作:
$ tomcat-manager --user=admin --password=newenglandclamchowder \
> http://localhost:8080/manager/ reload /myapp
和:
$ tomcat-manager --user=admin --password=newenglandclamchowder \
> http://localhost:8080/manager deploy /myapp ~/src/myapp/myapp.war
【讨论】:
不幸的是,我认为没有办法从命令行执行此操作。相反,我建议您查看是否有办法在单独的 Tomcat 实例中托管您需要重新启动的单个应用程序,这样您就可以在不影响其他应用程序的情况下重新启动该实例。
【讨论】:
works 将 app.war 的名称更改为 temp app.war.bkp(备份的任何名称),然后当 tomcat 删除 webapp 的源文件夹时,将 .bkp 的名称更改为原始名称。 这仅适用于控制台访问用户。
【讨论】: