30

我有一个运行多个应用程序的 PCI DSS 兼容环境,我只想重新启动一个应用程序而不重新启动服务器。我没有经理,因为显然在这种环境中是不允许的。

如何通过命令行重新启动单个 Web 应用程序?

4

5 回答 5

53

我知道我迟到了,但是为了从命令行重新加载应用程序,你可以做的一个小技巧是转到应用程序的 web.xml 并简单地触摸它。

cd webapps/<webapp-name>/WEB-INF/

touch web.xml

tomcat 每次注意到这个文件发生变化时都会重新加载应用程序,如果你只是触摸它,你实际上并没有修改文件,只是时间戳。

于 2016-09-16T09:25:47.183 回答
33

这是我的做法:

  1. 确保您的 tomcat 用户数据库中有具有“manager-script”角色的用户。这通常意味着您的${TOMCAT}/conf/tomcat-users.xml:
<user username="admin" password="secret" roles="manager-gui,manager-script"/>

否则,由于跨站点请求伪造 (CSRF) 保护,您将收到 403 错误。

  1. 使用curl或您喜欢的任何命令行工具来获取 URl <yourserver>/manager/text/reload?path=/<context_path>

    curl --user user:secret http://localhost:8080/manager/text/reload?path=/mypath  
    
于 2014-10-10T14:07:07.393 回答
2

如果无法访问管理器应用程序,您将无法执行此操作。如果您可以访问管理器应用程序,并且仍想使用命令行而不是 Web 浏览器,则可以尝试使用名为 tomcat-manager的命令行脚本来管理 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
于 2013-01-03T06:59:11.177 回答
0

不幸的是,我认为没有办法从命令行执行此操作。相反,我建议查看是否有办法在单独的 Tomcat 实例中托管您需要重新启动的单个应用程序,这样您就可以重新启动该实例而不影响其他应用程序。

于 2012-09-29T04:20:48.410 回答
0

作品将 app.war 的名称更改为临时 app.war.bkp(备份的任何名称),然后当 tomcat 删除 webapp 的源文件夹时,将 .bkp 的名称更改为原始名称。这仅适用于控制台访问用户。

于 2019-06-26T20:09:51.190 回答