调用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
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
楼主好像和我最接触的一个项目名字一样
建议楼主修改下.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命令的标准输出。
楼主好像和我最接触的一个项目名字一样
建议楼主修改下.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命令的标准输出。
p.waitFor(); 我想你这样就可以了!
现在很郁闷
不知道怎么写
好像 程序一直在等待
好像是exp出到一定时间就会自己停止到那
是不是服务器需要什么设置
你说的一直在等待的原因是#!/usr/bin/ksh 你用的shell
和
环境变量引起的。加上应该就可以了
java exec 的时候
生成的文件不能超过20m
超过就挂掉
数据少的时候备份是没有问题的
让你的操作系统管理员帮你修改下你可以生成文件的大小
ulimit -a可以看到
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就挂了
我用的是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和上面那个一样的
郁闷的很啊