如何使用Powershell的ExitCode重新启动我关闭的客户端/服务器对?

时间:2016-03-13 19:44:25

标签: java powershell

我有一个简单的Java客户端 - 服务器应用程序(code linked on previous Stack question here),我可以使用以下Powershell代码一起运行:

Start-Process java "-cp .;.\lib\commons-io-2.4.jar  FixedMessageSequenceServer"
Start-Sleep -Seconds 1
$JavaClient = Start-Process java "-cp .;.\lib\commons-io-2.4.jar FixedMessageSequenceClient -Wait -PassThru"

这很好用。但是,我想添加Powershell代码或Java代码,如果我们强制关闭(通过CTRL-C)应用程序(从服务器端),将重新启动上述Powershell代码。

我认为我应该是苹果才能使用这段代码:

if($JavaClient.ExitCode)
{
    # exit code is non-zero, better retry
    Start-Process java "-cp .;.\lib\commons-io-2.4.jar  FixedMessageSequenceServer" -Wait
    Start-Process java "-cp .;.\lib\commons-io-2.4.jar FixedMessageSequenceClient -Wait -PassThru"
}

然而,当我运行它时,这没有任何作用。我是否需要附加一些Java ProcessBuilder代码才能实现所需的功能?我们需要处理$JavaClient.ExitCode吗?

感谢

2 个答案:

答案 0 :(得分:1)

如果你只是在一个if语句上进行评估,那么你有一个小窗口可以重新启动,即使你的代码确实有效。

我建议您创建一个小的轮询脚本,它将每10秒,1分钟等检查某个进程的状态,如果它没有运行,它可以以这种方式启动。如果java客户端应该一直运行,你可以将它嵌套在无限循环中,或者如果它应该以一致的间隔/触发器运行(即每小时的顶部等等),你可以使用计划任务启动脚本。 )

尝试这样的事情:

if(![bool](get-process java -ErrorAction SilentlyContinue)){
    start-process java "-cp .;.\lib\commons-io-2.4.jar FixedMessageSequenceClient -Wait -PassThru"
}

答案 1 :(得分:0)

以下代码我的作品,但它不是很优雅的方式:

这是我的Java类:

import java.io.*;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class FixedMessageRunner{

public static void main(String[] args) {

  //  File file = new File("C://Java_Scratch_//Autonomic_Using_Batch//someFile.txt" );

  try {
   /* StackOverflow code */  

    for  (  ;  ; )  {
     ProcessBuilder pb = new ProcessBuilder("Powershell ", "WindowsTaskSchedulerPS.PS1");
     pb.directory(new File("C://Java_Scratch3_new_cleaned_Mar12//"));
     Process p = pb.start();
     p.waitFor();   
    }   
  /* end - StackOverflow code */  

  }
  catch (IOException i) {
    i.printStackTrace();
  }


  catch (InterruptedException i) {
    i.printStackTrace();
  }


 // end-count_func


}

}

这是我的powershell代码,标准代码:

# exit code is non-zero, better retry
Start-Process java "-cp .;.\lib\commons-io-2.4.jar  FixedMessageSequenceServer" 
Start-Sleep -Seconds 1
Start-Process java "-cp .;.\lib\commons-io-2.4.jar FixedMessageSequenceClient"

当我运行Java代码时,我需要从Windows任务管理器中删除Powershell.exe,以便触发上面的waitFor()