调用template.sh 文件备份数据库,备份完毕再执行下面的java程序,现在一执行就好像死了一样 不知道怎么回事,麻烦各位大侠帮下小弟,万分感谢~java
                Runtime rn=Runtime.getRuntime();
Process p=null;
System.err.println("hahahah  exec AnyQ");
p=rn.exec("sh ./template.sh "+ywrq);

        InputStream stderr = p.getInputStream();
        InputStreamReader isr = new InputStreamReader(stderr);
        BufferedReader br = new BufferedReader(isr);
        String line = null;
        while ((line = br.readLine()) != null) {
            System.err.println(line);
        }
        p.waitFor();
        .........
.sh
      vdate=$1
      exp aa/aa@ee  owner=uat file=/home/$vdate.dmp

解决方案 »

  1.   

    ee?
    楼主好像和我最接触的一个项目名字一样
    建议楼主修改下.sh
    第一行加上
    #!/usr/bin/ksh 你用的shell 然后再设置下你的环境变量

    ORACLE_HOME=/oracle/OraHome1
    export ORACLE_HOMEORACLE_SID....
    PATH....
    exp aa/aa@ee  owner=uat file=/home/$vdate.dmp log=/home/$vdate.log然后 rn.exec("绝对路径/template.sh "+ywrq); 
    前提是template.sh的权限允许java进程的执行者或者有效用户调用
    这样比较好
    PS:
    InputStream stderr = p.getInputStream();
            InputStreamReader isr = new InputStreamReader(stderr);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                System.err.println(line);
            } p.getInputStream是取的shell的 标准输出,也不是exp命令的标准输出。
      

  2.   

    ee?
    楼主好像和我最接触的一个项目名字一样
    建议楼主修改下.sh
    第一行加上
    #!/usr/bin/ksh 你用的shell 然后再设置下你的环境变量

    ORACLE_HOME=/oracle/OraHome1
    export ORACLE_HOMEORACLE_SID....
    PATH....
    exp aa/aa@ee  owner=uat file=/home/$vdate.dmp log=/home/$vdate.log然后 rn.exec("绝对路径/template.sh "+ywrq); 
    前提是template.sh的权限允许java进程的执行者或者有效用户调用
    这样比较好
    PS:
    InputStream stderr = p.getInputStream();
            InputStreamReader isr = new InputStreamReader(stderr);
            BufferedReader br = new BufferedReader(isr);
            String line = null;
            while ((line = br.readLine()) != null) {
                System.err.println(line);
            } p.getInputStream是取的shell的 标准输出,也不是exp命令的标准输出。
      

  3.   

    p=rn.exec("sh ./template.sh "+ywrq); 
    p.waitFor(); 我想你这样就可以了!
      

  4.   

    template.sh 这个文件应该怎么写
    现在很郁闷 
    不知道怎么写
    好像 程序一直在等待
      

  5.   

    加了日志
    好像是exp出到一定时间就会自己停止到那
    是不是服务器需要什么设置
      

  6.   

    不需要的吧,你可以tail -f 你log文件的名字 实时查询log文件中的内容
    你说的一直在等待的原因是#!/usr/bin/ksh 你用的shell 

    环境变量引起的。加上应该就可以了 
      

  7.   

    现在的问题是
    java exec  的时候  
    生成的文件不能超过20m
    超过就挂掉
    数据少的时候备份是没有问题的
      

  8.   

    java exec 后就是不java的进程了
    让你的操作系统管理员帮你修改下你可以生成文件的大小
    ulimit -a可以看到
      

  9.   

    ulimit -a  template.sh 
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 1024
    max locked memory       (kbytes, -l) 128
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    stack size              (kbytes, -s) 10240
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 16262
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited用这命令看到的内容
    这个shell手工执行多大文件都没有问题的
    就是用java调用的时候超过20m就挂了
      

  10.   

    你java进程的所有者也是这样的ulimit吗?
      

  11.   

    java进程所有者怎么看?
    我用的是jboss服务器
     万分感谢阿
      

  12.   

    ps -ef | grep java 看你的jboss的运行的java命令的user是哪个
      

  13.   

    或者说你的jboss服务器是哪个用户启动的
      

  14.   

    用户是 jboss[jboss@eos02 pensionServer]$ ulimit -a  jboss
    core file size          (blocks, -c) 0
    data seg size           (kbytes, -d) unlimited
    file size               (blocks, -f) unlimited
    pending signals                 (-i) 1024
    max locked memory       (kbytes, -l) 128
    max memory size         (kbytes, -m) unlimited
    open files                      (-n) 1024
    pipe size            (512 bytes, -p) 8
    POSIX message queues     (bytes, -q) 819200
    stack size              (kbytes, -s) 10240
    cpu time               (seconds, -t) unlimited
    max user processes              (-u) 16262
    virtual memory          (kbytes, -v) unlimited
    file locks                      (-x) unlimited和上面那个一样的 
    郁闷的很啊