如何使jar文件始终运行

时间:2011-06-20 09:00:18

标签: java linux

我有一个jar文件:myServerSide.jar,
这个jar从客户端应用程序接收请求,处理它们,每个线程都在一个线程中并呈现响应 我把我的jar放在linux上,但我希望它一直在运行

如果我java -jar myServerSide.jar &无缘无故地停留一段时间

我也试过deamon -- java -jar myServerSide.jar &它也会停止

你知道原因吗?

我应该怎么做,以便它始终保持运行,永不退出。(是否有必要将其作为服务)
谢谢你的帮助 (如果它是相关的,我将我的jar托管在linode(一个VPS)上)

这是我服务器的代码

        try
    {

        FTLogger.getInstance().logMessage(Level.FINE, "S: Connecting...");

        ServerSocket serverSocket = new ServerSocket(SERVERPORT);
        while (true)
        {
            Socket client = serverSocket.accept();
            Thread serverThread = new Thread(new ServerThread(client));
            serverThread.start();
        }

    }
    catch (Exception e)
    {
        FTLogger.getInstance().logMessage(Level.SEVERE, "S: Error getting connection", e);
    }

在我的日志中,我没有看到任何错误,并且在工作时,jar工作正常。 (如果你确定它是我的代码中的smthg,我应该打开另一个问题,并丢弃它吗?)

6 个答案:

答案 0 :(得分:2)

假设您无法访问屏幕,可以尝试使用nohup java -jar myServerSide.jar> log.out&

答案 1 :(得分:2)

  

如果我做java -jar myServerSide.jar&无缘无故在一段时间后停止

它停止的原因可能是(可能是)你的代码。

调试它应该告诉你它停止的原因。

答案 2 :(得分:2)

如果发生java.lang.Error,则不会被

捕获
 catch (Exception e) {
 ...
 }

 catch( Throwable t ) {
 ...
 }

会这样做。

答案 3 :(得分:1)

我认为你应该通过无限循环等待来自客户端的请求并将它们委托给单独的线程进行处理来以编程方式确保这一点:

// this is very high-level and obviously a exit point from this loop should be provided
while (true) {
    Request r = waitForRequest();
    processRequestInNewThread(r);
}

或者你还需要一些我缺少的东西吗?也许来自您的请求处理实现的示例代码将有所帮助。

答案 4 :(得分:0)

你应该给我们一些代码。我想到的第一件事是你需要确保接受客户端连接的方法需要在无限循环中运行。例如:

while (true) {
    acceptAndParseRequest();
}

答案 5 :(得分:0)

如果启动java应用程序,并将代码嵌入循环:

while(true){
...
}

它永远不会停止,它应该停止它的唯一原因是因为启动了异常(你在内部消耗资源)吗? 如果确实停止了,请尝试以这种方式理解问题:

while(true){
  try{
     ... your code ....
     }catch(Throwable t){
      system.out.println("This is my problem:" + t.printStackTrace);
     }
}

当然有帮助