java程序 linux服务器

解决方案 »

  1.   

    这个问题要看你的程序如何处理退出了,正常退出可以使用信号量。package core.test;import org.apache.log4j.Logger;import sun.misc.Signal;
    import sun.misc.SignalHandler;public class SignalHandlerTest {
    public static void main(String... args) throws Exception {
    final Logger log = Logger.getLogger(SignalHandlerTest.class);
    SignalHandler handler = new SignalHandler() {
    public void handle(Signal signal) {
    log.info(signal.getName());
    System.exit(-1);
    }
    };
    Signal.handle(new Signal("TERM"), handler);//相当于kill -15
    Signal.handle(new Signal("INT"), handler);//相当于Ctrl+C
    for (;;) {
    Thread.sleep(1000);
    }
    }
    }
    PS: 这段代码是从网站搜索来的,没测试过哈。当系统关机的时候也会给进程发送信号量,所以这个处理是相同的。
    但是如果使用Kill -9这种方式退出的话,是会有一些问题的,上面的代码不会执行回调函数的。
      

  2.   

    恩,提示我了,应当搞两个服务器,一台运行,另一台监控,一旦发现另一台掉线,监控机立刻启动.
    传输上使用tcp连接,运行的那台,不断把状态传到监控的那台去.
    只要tcp一断,监控机立刻启动,充当运行机
      

  3.   

    要看你的程序如何退出了正常退出的话,有很多办法,在程序退出之前做清理工作,这不用多说而如果是掉电或当机的话,可就没办法了,因为程序不可能知道服务器什么时候掉电。不过,为了保证程序业务的正确性,可以去参考一下数据库的事务处理机制。数据库不保证掉电的时候会把数据写入到磁盘,但是它的事务机制可以保证对数据库的一次事务操作(一系列的insert, update, delete)操作是完整的。