やりたいこととしては、javaのコードより、同サーバーに配置されたtomcatを再起動させるということがしたいです。
そのため、一通り調べた結果、ProcessBuilderを使ってtomcatの再起動を試みております。
tomcatはMacOSでbrewによりインストールしたtomcat8となります。
以下のようなコマンドをMacOSのターミナルで実施することで起動・停止ができることは確認済です。
shell
1// 起動 2brew services start tomcat@8 3 // 停止 4brew services stop tomcat@8
様々なサイトを参考にした結果、以下のようなtomcatを再起動するクラスを
javaのSpring Bootで作成済です。
java
1 public static void doRestartTomcat() { 2 Process process = null; 3 InputStream inputStream = null; 4 BufferedReader inputBufferedReader = null; 5 String text = ""; 6 try { 7 log.info("[TomcatUtils::doRestartTomcat()]: START"); 8 // tomcatの再起動 9 String[] args = new String[] {"brew", "services", "start tomcat@8"}; 10 ProcessBuilder processBuilder = new ProcessBuilder(args); 11 processBuilder.redirectErrorStream(true); 12 process = processBuilder.start(); 13 inputStream = process.getInputStream(); 14 inputBufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 15 16 StringBuilder builder = new StringBuilder(); 17 String readLine = null; 18 while (inputBufferedReader.readLine() != null) { 19 readLine = inputBufferedReader.readLine(); 20 builder.append(readLine); 21 } 22 // 実行結果 23 text = builder.toString(); 24 log.info("[TomcatUtils::doRestartTomcat()]:" + text); 25 26 // 終了 27 process.waitFor(); 28 // 処理ステータス取得 29 int ret = process.exitValue(); 30 if (ret == 0) { 31 log.info("[TomcatUtils::doRestartTomcat()]: END"); 32 // 正常終了 33 } else { 34 // 異常終了 35 log.error("[TomcatUtils::doRestartTomcat()]: error result : " + text); 36 } 37 } catch (InterruptedException | IOException e) { 38 e.printStackTrace(); 39 } finally { 40 // 各種クローズ 41 if (process != null) { 42 process.destroy(); 43 } 44 if (inputStream != null) { 45 try { 46 inputStream.close(); 47 } catch (IOException e) { 48 log.error(e.toString()); 49 } 50 } 51 if (inputBufferedReader != null) { 52 try { 53 inputBufferedReader.close(); 54 } catch (IOException e) { 55 log.error(e.toString()); 56 } 57 } 58 } 59 }
以上のようなソースでして、ProcessBuilderに渡すところに問題があると思うのですが、
問題点をご教授いただけないでしょうか。
何卒、宜しくお願い致します。
別件で、同じようなことをEC2サーバーで実施したく、systemctlで以下のようにコントロールしてるコマンドも
同じ様にProcessBuilderを使って制御さえたいです。
shell
1// 起動 2sudo systemctl start tomcat.service 3// 停止 4sudo systemctl stop tomcat.service
以上、宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー