Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java重新启动Tomcat_Java_Tomcat - Fatal编程技术网

用Java重新启动Tomcat

用Java重新启动Tomcat,java,tomcat,Java,Tomcat,我需要从Java代码重新启动tomcat 例如,如果查询在某个时间段内没有执行,那么它将自动重新启动tomcat 我尝试了以下关闭和启动代码,但是当我们关闭tomcat时,java代码将不会运行,tomcat也不会启动 注意:-我正在从应用程序运行此代码,并重新启动同一应用程序正在使用的同一个tomact 遵循代码 try { PreparedStatement.setQueryTimeout(10); rs = PreparedStatement.executeQuery()

我需要从Java代码重新启动tomcat

例如,如果查询在某个时间段内没有执行,那么它将自动重新启动tomcat

我尝试了以下关闭和启动代码,但是当我们关闭tomcat时,java代码将不会运行,tomcat也不会启动

注意:-我正在从应用程序运行此代码,并重新启动同一应用程序正在使用的同一个tomact

遵循代码

try {

    PreparedStatement.setQueryTimeout(10);
    rs = PreparedStatement.executeQuery();

} catch (SQLException ex) {

   System.out.println("IN CATCH BLOCK FOR THE REFRESH INVOICE");

   String shutcommand = "killall java";
    Process shutchild = Runtime.getRuntime().exec(shutcommand);

    System.out.println("JAVA PROCESS KILLED");

    String locationCommand = "cd /root/cluster/tomcat6/bin";
    Process locationChild = Runtime.getRuntime().exec(locationCommand);

    String strtcommand = "./startup.sh";
    Process strtchild = Runtime.getRuntime().exec(strtcommand);
}

您可以使用java执行本机命令

String command = "c:\program files\tomcat\bin\startup.bat";//for linux use .sh
Process child = Runtime.getRuntime().exec(command);

您应该考虑使用而不是运行时Excel。此外,当您想要执行命令时,您应该拆分所有参数

我建议:

ProcessBuilder shutcommand = new ProcessBuilder("killall", "java");
Process shutchild = shutcommand.start();

System.out.println("JAVA PROCESS KILLED");

ProcessBuilder strtcommand = new ProcessBuilder("/root/cluster/tomcat6/bin/startup.sh", "java");
Process strtchild = strtcommand.start();

在SQLException之后杀死tomcat这不是处理此异常的好主意。问题可能出在数据库站点上

但是,如果您确信这是您所需要的,您可以在本节中终止这个java进程,但是要运行tomcat,您应该使用例如bash和cron。为什么?终止执行代码后的信号将停止,因此您无法实现启动tomcat的命令行

如何检查tomcat:

TL;博士

生存

创建新进程将在JVM关闭后仍然有效。如果将命令合并到一行中 根据我的测试和测试,它应该可以正常工作

关机.bat

您需要使用shutdown.bat而不是停止windows服务,因为它经常在windows上失败,并显示消息“无法停止服务Apache Tomcat…”

ping 0.0.0.0-n 4

您需要在关机后等待一段时间,否则您将看到服务已经启动。请稍后重试错误消息。还要注意,我使用ping而不是timeout,因为它会在某些系统上导致问题

C:\WINDOWS\system32\net启动Tomcat8

我正在启动windows服务,因为调用startup.bat对我无效。如果您使用不同的tomcat或自定义服务名称(例如Tomcat7),请记住替换Tomcat8

重定向I/O


不要重定向进程实例或命令的输入或输出,否则JVM将关闭,Tomcat将不会启动。

现在这是一种有趣的方法。如果数据库查询失败,您的应用程序将自杀,然后尝试从死亡中复活。重新启动Tomcat会有什么帮助,考虑到时间过长可能是数据库服务器的错误?对每个SQLException执行此操作可能会导致重新启动循环,如果存在其他一些数据问题,例如重复密钥。我是java-杀死我-好吧,我死了-现在我可以重新启动Tomcath。通常这样做的方式是使用包装器当检测到错误时重新启动其子进程的进程。完全是个坏主意。我想这是个问题。主要问题是什么?谢谢,但已经试过了。它将再次启动tomcat,并将有大量tomcat运行实例您是否已经尝试在终端中执行此操作以检查路径是否良好?是的,我已经尝试过此操作,但它正在工作,但会获得大量tomcat实例。因此,此方法的唯一缺陷是未使用ProcessBuilder?一个程序杀死自己,然后在死的时候启动自己的想法很好,很好?谢谢,我面临着同样的问题,有没有办法做到这一点。你的java代码可以杀死所有的java进程。要检查tomcat是否处于活动状态:要从cron运行tomcat,请观看以下内容:[在crontab上执行python脚本]谢谢。现在我已经编写了一个脚本来关闭和重新启动tomcat,并从java代码中调用了相同的脚本。干得好。我今天有一个释放,所以这样做,将修复后的僵局
File binaryDir = new File(System.getProperty("catalina.home") + File.separator + "bin");
String restartCommand = "\"shutdown.bat & ping 0.0.0.0 -n 4 & C:\\WINDOWS\\system32\\net start Tomcat8\"";
new ProcessBuilder("cmd", "/c", restartCommand).directory(binaryDir).start();